前言
最近学习了 MVP 模式,趁着现在还印象深刻,赶紧写下这篇博客进行记录。这里需要特别提醒一点的是,MVP 应当理解成一种思想,无需局限于某一种实现方式或套路,每个人都可以有自己的 MVP 实现。废话不多说,现在开始进入正文吧!
为什么使用 MVP 模式
在介绍 MVP 之前,我们先来了解下 MVP 的前身——MVC。MVC 的全称是 Model-View-Controller,即 模型 - 视图 - 控制器 的关系。它们之间的关系图如下所示:
Model:业务模型层,JavaBean 实体类,用于保存实例数据。
View:视图层,程序的 UI 界面,用于向用户展示数据和接收输入的数据。
Controller:控制层,更新 UI 界面和数据实例。
下面举一个简单的例子说明 MVC 模式。
假设我们现在做一个登陆界面,用户输入账号密码之后,如果正确,就用 Toast 提示登陆成功,否则就用 Toast 提示登陆失败。
首先是 Model 层的 User 类,用于保存用户的用户名和密码信息:
public class User {
private String name;
private String pwd;
public User(String name, String pwd){
this.name = name;
this.pwd = pwd;
}
public String getPwd() {
return pwd;
}
public String getName() {
return name;
}
}
接下来是 MainActivity 的实现:
public class MainActivity extends AppCompatActivity {
// 用户名输入
private EditText mNameEdit;
// 用户密码输入
private EditText mPwdEdit;
// 登陆按钮
private Button mButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNameEdit = (EditText)findViewById(R.id.edit_username);
mPwdEdit = (EditText)findViewById(R.id.edit_pwd);
mButton = (Button)findViewById(R.id.btn_login);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
User user = new User(mNameEdit.getText().toString(), mPwdEdit.getText().toString());
login(user);
}
});
}
private void