mvp模式初探
来源:互联网 发布:莫宁职业生涯数据 编辑:程序博客网 时间:2024/06/06 07:51
mvp模式初探
前言
mvp应用逐渐广泛,学习mvp模式,将给你的编码带来很大的优势。
什么是mvp
mvp,全称model view presenter,是mvc的升级版。我们都知道mvc表现层与业务层分离,耦合度不高。实际上,我们也知道,mvc(model view controler)中,view 和controler基本上是由activity承载,这就造成一个activity可能很庞大,不便于后期维护和升级。
mvp即是通过presenter接口将view与model解耦,各模块可独立变化, 有效降低耦合度。
mvp思想
mvp将activity中的UI逻辑抽象成view接口,把业务逻辑抽象成presenter接口,model还是原来的model。
mvp模式中,acitvity用来显示view和管理acitivity生命周期,逻辑交由presenter实现。
mvp模式UML图
使用mvp模式流程
- 首先创建一个Presenter接口,并创建的它的实现类PresenterImpl,用以实现所有的逻辑;
- 创建一个IView接口用于实现view(视图)逻辑,它的实现类是activity或fragment;
- 在Activity中包含一个Presenter的引用,PresenterImpl中又包含一个IView的引用和model的依赖;
这样Activity的业务就可以交给Presenter来实现了。
mvp的简单例子
为方便说明mvp在实际开发中的应用,这里举个简单的例子,方便理解。
代码结构
首先看LoginActivity代码:
public class LoginActivity extends AppCompatActivity implements ILoginView, View.OnClickListener { private Button btn_login; private Button btn_clear; private EditText et_name; private EditText et_pwd; private ILoginPresenter iLoginPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_clear= (Button) findViewById(R.id.btn_clear); btn_login= (Button) findViewById(R.id.btn_login); et_name= (EditText) findViewById(R.id.et_name); et_pwd= (EditText) findViewById(R.id.et_password); btn_clear.setOnClickListener(this); btn_login.setOnClickListener(this); iLoginPresenter=new LoginPresenterCompl(this); } @Override public void onClearText() { et_pwd.setText(""); et_name.setText(""); } @Override public void onLoginResult(Boolean Result, int code) { if(Result){ Toast.makeText(this,"登录成功!",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this,"登录失败,请检查用户名和密码。",Toast.LENGTH_SHORT).show(); } } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_clear: iLoginPresenter.clear(); break; case R.id.btn_login: String name=et_name.getText().toString().trim(); String pwd=et_pwd.getText().toString().trim(); if(name.equals("")||pwd.equals("")){ Toast.makeText(this,"用户名和密码不能为空!",Toast.LENGTH_SHORT).show(); } iLoginPresenter.doLogin(name,pwd); break; } }}
接着看Presenter,代码如下:
public interface ILoginPresenter { public void doLogin(String name,String pwd); public void clear();}
跟着是ILoginView,代码如下:
public interface ILoginView { public void onClearText(); public void onLoginResult(Boolean Result,int code);}
Presenter的具体实现类,代码如下:
public class LoginPresenterImpl implements ILoginPresenter { private ILoginView iLoginView; private User user; public LoginPresenterImpl(ILoginView iLoginView){ this.iLoginView=iLoginView; user=new User("zhangshan","123456"); } @Override public void clear() { iLoginView.onClearText(); } @Override public void doLogin(String name, String pwd) { if (name.equals(user.getName())&&pwd.equals(user.getPwd())){ iLoginView.onLoginResult(true,200); }else{ iLoginView.onLoginResult(false,202); } }}
最后是model:
public class User { private String name; private String pwd; public User(String name,String pwd){ this.name=name; this.pwd=pwd; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; }}
这是一个很简单的demo。
最后再总结一下mvp带来的优势:
解耦,为activity瘦身,方便扩展维护。
这只是个起点,后续会进一步学习总结mvp相关内容。
0 0
- MVP 模式初探
- mvp模式初探
- Android MVP 模式初探
- MVP模式初探
- MVP模式初探
- android中的MVP模式初探
- iOS中的MVP模式初探
- .Net平台-MVP模式初探(一)
- Android开发,MVP开发模式初探。
- android之MVP开发模式初探
- MVC、MVP、MVVM 初探(二)--- MVP模式
- mvp初探
- mvp初探
- [Android学习]Android中MVP模式初探1
- Android MVP RxJava 初探
- kotlin初探mvp架构
- MVP模式
- MVP模式
- Xml序列化和反序列化
- Android之 VersionCode,VersionName(1)版本号和版本名称的重要性介绍
- DIV布局的设置(水平或者垂直居中)
- Java-Json解析--01
- JS循环遍历json数据
- mvp模式初探
- git提交代码
- ProgressDialog使用总结
- TP框架分析
- 一个操作系统的实现(4):分页机制
- 一个开始,jQuery里ajax修改函数外的变量
- Java中application与applet的区别
- nice服务端架构重构与演进
- C++中placement new操作符(经典)