Android--谷歌MVP代码分析<简单源码>
来源:互联网 发布:涉黄网络犯罪 编辑:程序博客网 时间:2024/05/21 04:43
资料来源:https://github.com/konmik/konmik.github.io/wiki/Introduction-to-Model-View-Presenter-on-Android
MVP:
View 对应于Activity,负责View的绘制以及显示数据并对用户行为做出反应的层;
Model 数据访问层<数据库,远程服务器>,JavaBean;
Presenter 数据处理层,负责完成View于Model间的交互,完成数据以及业务逻辑的处理;
可以理解为:减少了Activity的职责,简化了Activity中的代码,将复杂的逻辑代码提取到了Presenter中进行处理。对应的好处:耦合度更低,更方便的进行测试
MVC:
MVP:
结合谷歌官方例子,简化一个MVP:
–1:先看两个Base
public interface BaseView<T> { void setPresenter(T presenter);}public interface BasePresenter { void start();}
start()方法可以放初始化类的方法,或者,可以拿来进行类初始化后的事件处理,网络请求
–2:契约类:
—– View是UI操作
—–Presenter 是数据业务逻辑操作
public interface UserContract { interface View extends BaseView<Presenter> { UserModel getUser(); } interface Presenter extends BasePresenter { void showUser(); }}
–3:Presenter:
——构造函数:
MainActivityPresenter的构造函数,参数为UserContract.View,并调用view.setPresenter();
MainActivityPresenter
public class MainActivityPresenter implements UserContract.Presenter { private Context context; private UserContract.View view; public MainActivityPresenter(Context context, UserContract.View view) { this.context = context; this.view = view; view.setPresenter(this); } @Override public void showUser() { getShowUser(); } @Override public void start() { } private void getShowUser() { UserModel userModel = view.getUser(); Toast.makeText(context, "user" + userModel.getName() + userModel.getPassword(), Toast.LENGTH_LONG).show(); }}
–4:Modle:
—-JavaBean<实体类>
public class UserModel { private String name; private String password; public UserModel(String name, String password) { this.name = name; this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
–5:View:
——对应的Activity或者Fragment:
——new MainActivityPresenter();—-初始化对象
——presenter.start();—-调用初始化方法
——setPresenter();
public class MainActivity extends AppCompatActivity implements UserContract.View { private UserContract.Presenter presenter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new MainActivityPresenter(this,this); presenter.start(); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { presenter.showUser(); } }); } @Override public UserModel getUser() { UserModel userModel = new UserModel("erhu", "key"); return userModel; } @Override public void setPresenter(UserContract.Presenter presenter) { this.presenter=presenter; }}
注意:
在onCreate()中:
new MainActivityPresenter();
而并没有像写成<两者都可以>:
presenter=new MainActivityPresenter();
是因为在MainActivityPresenter的构造方法里面调用了view.setPresenter(),相当于间接初始化了相关数据。
- Android--谷歌MVP代码分析<简单源码>
- Android MVP框架MVPro的使用和源码分析
- Android MVP框架MVPro的使用和源码分析
- Android AsyncTask源码简单分析
- 简单Android MVP 实例
- Android Mvp 简单示例
- Android Mvp简单梳理
- Android MVP 代码练习
- Android MVP架构分析
- Android MVP 项目分析
- Android mvp 使用分析
- Android源码分析:RIL代码分析
- MVP项目Philm代码分析
- Android MVP架构简单封装
- Android MVP模式 简单使用方法
- Android 简单的MVP实例
- 天天记录 - Android requestLayout源码简单分析
- Android源码分析之简单工厂模式
- 网页打印表单js代码
- javascript的 Source Map
- 解决 Successfully created project '' on GitHub, but initial push failed: Could not read from remote re
- 鸟哥Java学习之类与对象-面向对象
- ActiveMQ 的安装(单节点)
- Android--谷歌MVP代码分析<简单源码>
- CentOS 6.3下PostgreSQL 的安装与配置
- 第十四周项目二-两个成员的类模版(1)
- Centos 设置静态IP
- WebView
- XML解析(xstream)第三方
- 图片下载
- 一步一步学习JNI(一)
- 二、C++ 类的定义与使用