一、MVP模式是什么
mvp模式是从mvc模式改造演变而来的,是model、view与presenter的缩写。在传统的mvc模式中,view与model是可以相互访问的。所以为了更好的让模型层(model)与视图层(view)更好的解耦和,mvp提供了presenter作为中间桥梁。在一般的Android开发中,Activity包含了view与Controller的功能,导致Activity中代码冗杂。
二、mvp模式与mvc模式的区别
在MVC里,View是可以直接访问Model的!而在mvp中,view与model是相互不可见的。
三、mvp模式的优缺点
优点:
1.降低model层与view层的耦合,使用presenter作为桥梁,使每个模块都专注于自己的功能,使代码结构更清晰,增强代码的可读性。
2.增强代码的复用性,一个presenter可以供多个view使用。
3.便于单元测试。
缺点:
1.如果view的数量和特异性较高,会使每一个view都有一个presenter,导致类的数量相应的增加。
四、Android中使用MVP的简单实例。
使用mvp模式实现简单加法计算器。
1.运用接口来实现。首先创建model代码实现数据操作,定义view接口来用于显示数据,presenter用来作为桥梁。
//addModel用于计算
public class AddModel
{
public AddModel(){}
public int addresult(int one,int two){
return one+two;
}
}
//view接口
public interface ResultView
{
void set_Result(int result);
int getOne();
int getTwo();
}
//实现view接口的Activity,作为view来使用
public class MainActivity extends AppCompatActivity implements ResultView{
EditText et_one;
EditText et_two;
TextView tv_res;
Button bt_res;
Button bt_res2;
Button bt_res3;
AddPresenter mAddPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_one=(EditText)findViewById(R.id.ed_one);
et_two=(EditText)findViewById(R.id.ed_two);
tv_res=(TextView)findViewById(R.id.tv_res);
bt_res=(Button)findViewById(R.id.bt_res);
bt_res2=(Button)findViewById(R.id.bt_res2);
bt_res3=(Button)findViewById(R.id.bt_res3);
mAddPresenter=new AddPresenter(this);
bt_res.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
//将数据传到presenter中进行操作
mAddPresenter.setresult();
}
});
}
@Override
public void set_Result(int result)
{
tv_res.setText(result+"");
}
@Override
public int getOne()
{
return Integer.parseInt(et_one.getText().toString());
}
@Override
public int getTwo()
{
return Integer.parseInt(et_two.getText().toString());
}
}
//addPresenter沟通view与model,将运算送入model中处理,然后再抛给view显示出来,实现view与model的解耦
public class AddPresenter
{
ResultView mResultView;
AddModel mAddModel;
public AddPresenter(ResultView resultView){
mResultView=resultView;
mAddModel=new AddModel();
}
public int addresult(int one,int two){
return mAddModel.addresult(one,two);
}
public void setresult(){
mResultView.set_Result(addresult(mResultView.getOne(),mResultView.getTwo()));
}
}
五、结语
上述便是android中mvp模式的简单实现方式,虽然增加了很多类,但是在大项目开发的时候,mvp模式可以帮助我们更好的为项目做架构,提供代码的质量,也将增强代码的扩展性和可读性。
作者说:这是第一次写博客,文章内容比较简单,如果文章中有什么错误,还请指出,谢谢。(csdn这个坑编辑器,第一次写的全没了,又写了一次)