Android中mvp模式的使用

一、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是相互不可见的。
mvc模式
mvp模式

三、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这个坑编辑器,第一次写的全没了,又写了一次)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值