Android开发MVP模式个人见解
来源:互联网 发布:钢笔字帖谁的好 知乎 编辑:程序博客网 时间:2024/06/05 03:17
Android开发MVP模式个人见解
1. MVC:
MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:[
- Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
- View(视图)显示数据(数据库记录)。
- Controller(控制器)处理输入(写入数据库记录)。
MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。
2. MVP。
MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。
- Model业务逻辑和数据实体的模型,可以浅显的理解为数据实体类和特定事件的逻辑方法封装类
- View在Android中,简单理解可以认为是actviity和布局文件,加上对视图相应的view组件上事件数据操作的interface接口类总和(浅显理解)
- Presenter 负责完成View于Model间的交互。
在Android中一个mvp下的用户登录domemodel:
用户实体类
public class User {private String username ;private String password ;
public void setUsername(String username) { this.username = username;}public void setPassword(String password) { this.password = password;}public String getUsername() { return username;}public String getPassword() { return password;}@Overridepublic String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + '}';}
}
定义一个接口类方便登录成功或者失败动作监听
public interface OnLoginListener {
void loginSuccess(User user);//登陆成功
void loginFailed();//登录失败
}
登录的接口类
public interface UserLogin {
public void login(String username, String password, OnLoginListener mListener);
}
登录的实现类
public class UserHttpLogin implements UserLogin {
@Override
public void login(String username, String password, OnLoginListener mListener) {
if (“soufang”.equals(username) && “123456”.equals(password))
{
User user = new User();
user.setUsername(username);
user.setPassword(password);
mListener.loginSuccess(user);
} else
{
mListener.loginFailed();
}
}
View:
public interface MyLoginView {
String getUserName();
String getPassword();
void setUserName(String userName);
void setPassword(String password);
void toMainActivity(User user);//登陆成功
}
MyLoginView 作用在于让activity实现它,让activity是一个MyLoginView ,这样关于对用户名 密码的获取或者设置的操作就可以单独提取出来,对登录成功失败时的监听也可以用方法抽象出来便于presenter模块调用。
public class MainActivity extends Activity implements MyLoginView {
private EditText mUsername, mPassword;
private Button mBtnLogin;
private UserLoginPresenter mUserLoginPresenter;
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews();}private void initViews() { mUsername = (EditText) findViewById(R.id.et_username); mPassword = (EditText) findViewById(R.id.et_password); mBtnLogin = (Button) findViewById(R.id.bt_login); mUserLoginPresenter = new UserLoginPresenter(this); mBtnLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mUserLoginPresenter.login(); } });}@Overridepublic String getUserName() { return mUsername.getText().toString();}@Overridepublic String getPassword() { return mPassword.getText().toString();}@Overridepublic void setUserName(String userName) { mUsername.setText(userName);}@Overridepublic void setPassword(String password) { mPassword.setText(password);}@Overridepublic void toMainActivity(User user) { Toast.makeText(this, user.getUsername() + " 登陆成功", Toast.LENGTH_SHORT).show();}@Overridepublic void showFailedError() { Toast.makeText(this, "登录失败", Toast.LENGTH_SHORT).show();}@Overrideprotected void onStart() { super.onStart(); mUserLoginPresenter.setDAta();}@Overrideprotected void onDestroy() { super.onDestroy(); //个人认为在actity销毁时,把引用上下文的对象或者需要销毁的手动销毁 mUserLoginPresenter = null ;}}
view就是界面的呈现,及封装相应方法,便于 View和model交互时在presenter中调用:
presenter:
public class UserLoginPresenter {
private UserHttpLogin userBiz;
private MyLoginView userLoginView;
public UserLoginPresenter(MyLoginView userLoginView) { this.userLoginView = userLoginView; this.userBiz = new UserHttpLogin();}public void login() { userBiz.login(userLoginView.getUserName(),userLoginView.getPassword(),new OnLoginListener(){ @Override public void loginSuccess(User user) { userLoginView.toMainActivity(user); } @Override public void loginFailed() { userLoginView.showFailedError(); } });}public void setDAta() { userLoginView.setPassword("MVP"); userLoginView.setUserName("安安");}}
presenter 把activity变成他的一个View的MyLoginView对象,并声明model的登录实现类UserHttpLogin的对象,这样就有效的把View与model结合在一起,可以让他们之间的方法互相调用。
- Android开发MVP模式个人见解
- MVPExample--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 开发模式
- git commit –a时使用vim编辑提交信息
- Quick-Cocos2D-X 并成功运行示例代码
- XML 数据解析方式
- const
- windows杀掉占用端口进程
- Android开发MVP模式个人见解
- http://base64.supfree.net/---网站base64加密竟然是错误的
- jms发送消息
- 5-14 求整数段和 (15分)
- 手机上的消息推送
- Wildcard Matching
- Spring同Mybatis的整合
- Three.JS(1)直线
- Android使用Lambda之中文乱码