<Android 基础(三)> MVP模式
来源:互联网 发布:服务器同步软件 编辑:程序博客网 时间:2024/05/02 02:51
前言
MVP,这里指的并不是篮球比赛中的MVP(最有价值球员),而是一种代码框架和设计思想,它是由MVC演变而来的。
MVP模式(Model-View-Presenter)
是MVC模式的一个衍生。主要目的是为了解耦,使项目易于维护。
Model 是业务逻辑和实体模型
View 是包含Presenter的引用。所要做的就是当有交互时,调用Presenter里的对应方法。通常会通过Activity实现
Presenter 是负责完成View于Model间的交互,从Model里取数据,返回给View处理好的数据。
MVC模式(Model-View-Controller)
主要目的是讲显示逻辑和业务逻辑独立出来
Model 是应用程序中用于处理应用程序数据逻辑的部分。
View 是应用程序中处理数据显示的部分。
Controller 是应用程序中处理用户交互的部分
从构造图上可以看到最主要的差异就是
MVC中是允许Model和View进行交互的,而MVP中很明显,Model与View之间的交互由Presenter完成。还有一点就是Presenter与View之间的交互是通过接口的
MVP使用方法
代码结构
代码内容
LoginActivity.java
public class LoginActivity extends AppCompatActivity implements ILoginView { @Bind(R.id.usernameWrapper) TextInputLayout usernameWrapper; @Bind(R.id.passwordWrapper) TextInputLayout passwordWrapper; @Bind(R.id.bt_clear) Button btClear; @Bind(R.id.bt_login) Button btLogin; private LoginPresenterCompl loginPresenterCompl; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); ButterKnife.bind(this); loginPresenterCompl = new LoginPresenterCompl(this); } @OnClick({R.id.bt_clear, R.id.bt_login}) public void onClick(View view) { String username = usernameWrapper.getEditText().getText().toString(); String password = passwordWrapper.getEditText().getText().toString(); switch (view.getId()) { case R.id.bt_clear: loginPresenterCompl.clearText(); break; case R.id.bt_login: loginPresenterCompl.doLogin(username, password); break; } } @Override public void onLoginResult(boolean isLogged) { if (isLogged) { Toast.makeText(this, "Logged in Successfully", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "Logged Failed", Toast.LENGTH_SHORT).show(); } return; } @Override public void onClearText() { usernameWrapper.getEditText().setText(""); passwordWrapper.getEditText().setText(""); usernameWrapper.clearFocus(); passwordWrapper.clearFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0); } }}
LoginActivity实现ILoginView接口
public interface ILoginView { void onLoginResult(boolean isLogged); void onClearText();}
LoginPresenterCompl.java实现ILoginPresenter接口
public class LoginPresenterCompl implements ILoginPresenter{ private ILoginView iLoginView; Handler handler; public LoginPresenterCompl(ILoginView loginView) { iLoginView = loginView; handler = new Handler(Looper.getMainLooper()); } @Override public void doLogin(String username, String password) { final String tp_username = username; final String tp_password = password; new Thread(new Runnable() { @Override public void run() { boolean isLogged = false ; if(UserModel.isValidUser(tp_username , tp_password)) { isLogged = true; } final boolean tp_isLogged = isLogged; handler.post(new Runnable() { @Override public void run() { iLoginView.onLoginResult(tp_isLogged); } }); } }).start(); } @Override public void clearText() { new Thread(new Runnable() { @Override public void run() { handler.post(new Runnable() { @Override public void run() { iLoginView.onClearText(); } }); } }).start(); }}
public interface ILoginPresenter { void doLogin(String username, String password); void clearText();}
UserModel.java这个没有怎么使用,但是实际使用过程中不同的Model会有不同的处理方式
public class UserModel { public String username; public String password; public UserModel(String username, String password) { this.username = username; this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public static boolean isValidUser(String username, String password){ return (username.equals("guagua") && password.equals("guagua")); }}
简约类图:
效果图
- <Android 基础(三)> MVP模式
- Android---MVP设计模式高级(三)
- Android---MVP设计模式高级(三)
- 浅谈Android中MVC、MVP、MVVM模式(三)
- Android那点事-系列之(三)MVP模式在Android中的应用
- Android-BaseLine框架初识之MVP模式最佳方案(三)
- Android当中的MVP模式(三)基于分页列表的封装
- Android开发之路(三)--聊聊MVP开发模式
- Android中MVP模式的抽象MVP类,减少代码量,增加中断机制(三)
- android中MVP模式(一)
- android中的mvp模式(二)
- Android的MVP模式应用(Login)
- Android---MVP设计模式初级(一)
- Android---MVP设计模式中级(二)
- android中MVP模式(一)
- android中的mvp模式(二)
- Android框架模式(1)-MVP入门
- Android框架模式(2)-MVP进阶
- 百度地图
- Linux is not Matrix——日志搜集平台ELK(III)
- leetcode-Valid Parentheses-20
- Android UI高级之Fragment
- 飛飛(五十五)简单的函数模板,功能是讲数组a中的前size个元素从小到大排列
- <Android 基础(三)> MVP模式
- 使用Nginx实现反向代理
- windows logicaldisk and diskdrive command
- hihoCoder 1303 模线性方程组
- 软考——人生迷茫篇
- 日期类型
- linux与windows文件共享及全屏
- Linux服务器安全配置
- Sheel 脚本 基本语句及逻辑关系比较