MVP模式在实际开发中的使用
来源:互联网 发布:手机淘宝购物付款流程 编辑:程序博客网 时间:2024/06/09 14:21
业务逻辑写的越来越多,越来越复杂,将业务逻辑都放到Activity中写当时可能觉得很爽,因为写的随意,写的速度也快,但是后期维护很困难,交接项目的成本也很高。MVP模式应运而生。
MVP原理
M指代model,用于存放数据的模型,用于Json解析、缓存等。
V指代View,通常意义上的Android视图,由于静态的view功能太少,需要Activity控制,这里将Activity视为View,进行视图的刷新、可见性等的控制。
P指代Presenter,任命者,去处理各种业务上的逻辑,处理完成后通知View,View根据返回结果更新UI。
本质上来说,MVP模式是通过接口层将UI和业务逻辑分离。UI不关心具体的业务逻辑,业务逻辑不关心UI怎么显示。一个MVP的实例可以不含有model,但是一定会有view和presenter。
实例
本例模拟从网络抓取数据的场景
工程目录如下:
BaseView.java
public interface BaseView<T> { void setPresenter(T t);}
BasePresenter.java
public interface BasePresenter { void destroy();}
以上两个类是基础的类,将来app里的所有V和P都可以继承它们。
IMainView.java
public interface IMainView extends BaseView<IMainPresenter>{ void showErrorMsg(String str); void showNetResult(InfoModel model);}
这个接口定义了UI层需要处理的两个动作,显示错误信息和显示请求结果。
IMainPresenter
public interface IMainPresenter extends BasePresenter{ void getInfoFromNet(int who);}
这个接口定义了业务逻辑层需要处理的逻辑,从网络获取信息。
public class MainActivity extends AppCompatActivity implements IMainView { private IMainPresenter mPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化presenter mPresenter = new MainPresenter(this); mPresenter.getInfoFromNet(1); } @Override public void showErrorMsg(String str) { Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); } @Override public void showNetResult(InfoModel model) { Toast.makeText(this, model.result, Toast.LENGTH_SHORT).show(); } @Override public void setPresenter(IMainPresenter iMainPresenter) { this.mPresenter = iMainPresenter; } @Override protected void onDestroy() { super.onDestroy(); //presenter回收 if (mPresenter != null) { mPresenter.destroy(); } }}```###MainPresenter.java```javapublic class MainPresenter implements IMainPresenter { IMainView mainView; public MainPresenter(IMainView mainView) { this.mainView = mainView; this.mainView.setPresenter(this); } @Override public void getInfoFromNet(int who) { System.out.println("hola " + Thread.currentThread().getId()); if (who == 1) { InfoModel model = new InfoModel(); model.code = 0; model.msg = "success"; model.result = "Got information from internet."; mainView.showNetResult(model); } else { mainView.showErrorMsg("error here."); } } @Override public void destroy() { //进行必要的垃圾回收 mainView = null; }}
源码地址:https://github.com/boomstack/TestMVP
2 0
- MVP模式在实际开发中的使用
- Android架构模式MVP的在实际中的应用
- MVP模式在Android实际项目中的应用和优化
- MVP模式在Android开发中的应用
- MVP模式在Android开发中的应用
- MVP模式在Android开发中的应用
- MVP模式在Android开发中的应用
- MVP模式在Android开发中的应用
- MVP模式在Android开发中的应用
- MVP模式在Android开发中的应用
- MVP模式在Android开发中的应用
- MVP模式在Android开发中的应用
- MVP模式在Android开发中的应用
- MVP模式在Android开发中的应用
- MVP模式在Android开发中的应用
- MVP模式在Android开发中的应用
- Mvp模式在Android开发中的应用
- MVP模式在Android开发中的应用
- 使用Swing包创建一个用户图像页面
- Activity/Window/View
- windows无法启动MySQL服务 错误1067
- Qt介绍2---.pro .pri .prf .prl文件
- 汇编--基础知识
- MVP模式在实际开发中的使用
- Emlog博客网站数据完美搬家教程
- javaGUI之基本布局方式
- Lightoj 1166 - Old Sorting (简单贪心)
- Swift 3.0 版本变化
- (一)常见UI界面以及部分功能的实现
- react生命周期方法
- 违章动物
- javaGUI基本知识讲解