标签:MVP String void mView Android View public 进阶
### MVP简介 >MVP 全称:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的[地方](https://baike.baidu.com/item/%E5%9C%B0%E6%96%B9/2262175):Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。 对于MVC不了解的朋友可以查此文: [Android进阶之路(1)-详解MVC](https://www.jianshu.com/p/285f6a8d971f) **Android中的MVP:** - M层:适合做一些业务逻辑处理,比如数据库存取操作,网络操作,复杂的算法,耗时的任务等都在model层处理。和MVC类似 - V层:对应的Activity,负责xml绘制与页面交互 - P层:负责View与Model之间的交互 ![](https://www.icode9.com/i/l/?n=18&i=blog/1312938/201909/1312938-20190901084219353-399431689.png) ### 为什么要用MVP 我们先想想上篇文章,我们讲到为什么要用MVC,当时我们总结了几点: - 代码复用 - 耦合性低 - 方便维护的高等 然而我们在写MVC项目时候,也发现了一些问题: 1.对于Android中的Activity或者Fragment ,我们不能很清晰的区分它是View还是Controller,既有交互又有页面绘制,这就导致了activity和fragment很“庞大” 2.View与Model确实是分离的,但是关联性太强,这就导致activity与model的联系强,这样我们只要改一点点代码, model 、view、activity 都会变,维护成本太高,View与Model之前的耦合性太高。 而MVP最大的改变就是View与Model实现完全隔离。View把操作意图给P层,P收到后,会调用Model层来实现具体的逻辑, 逻辑实现后会再通知给P, P再通过View的接口回调给View。即便V和M更改了,也不会有影响,耦合性低。 ### MVP DEMO 以登录模块为例,来实现MVP **1.定义View接口- ILoginView** ``` /** * 获取view层的dialog * * @return retuen */ Dialog getLoadDialog(); /*** * 关闭view层的dialog */ void cancelLoadDialog(); /** * 获取手机号参数 * * @return username */ String getPhone(); /** * 获取密码 * * @return password */ String getCode(); /** * 弹出消息 * * @param msg msg */ void showMsg(String msg); ``` View接口大家都明白吧?就是你要告诉给P的意图。activity实现此接口。并调用P的方法: ``` @Override public void cancelLoadDialog() { if (dialog!=null&&dialog.isShowing()){ dialog.dismiss(); } } @Override public String getPhone() { return edPhone.getText().toString(); } @Override public String getCode() { return edCode.getText().toString(); } @Override public void showMsg(String msg) { Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_SHORT).show(); } ``` ``` mPresenter.login(); ``` **2.定义Model与ModelImpl** Model: ``` public interface ILoginModel { void login(String phone, String code, onl oadDatasListener标签:MVP,String,void,mView,Android,View,public,进阶 来源: https://www.cnblogs.com/qinzishuai/p/11441365.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。