当前位置:天才代写 > tutorial > 安卓教程 > android开发系列之MVP设计模式

android开发系列之MVP设计模式

2021-02-13 16:20 星期六 所属: 安卓教程 浏览:14

      近期在开发设计一个android的新项目中,发觉了一个很好用的策略模式(MVP)。大伙儿很有可能一见到这一姓名就有点儿蒙,MVP究竟是什么鬼呢?它的功能强大究竟反映在哪呢?不要着急,下边就要大家一一共享出去。

      说到MVP,大伙儿或许便会想起MVC。没有错,实际上她们彼此之间的确有非常大的联络,MVC对比大伙儿全是十分的了解了,典型性的三层架构。可是MVC在应用的全过程中有哪些缺点呢?就自己的理解是它会造成Control层和Model层对接太密不可分,由于有的情况下你务必从Model里边读写能力数据信息。而MVP 呢?它是在Model和View中间加了个Presenter层,全部的互动都产生在Presenter层里边。见到这儿,有些人便会讲了,那这不是跟MVC一样的吗?我看不出来有什么不同呀?下边就要大家讨论一下具体编码,或许你也就能领悟出一些物品了。

      假如我前台接待有那么个Activity,编码以下:

public class MyTestActivity extends Activity implements View.OnClickListener {

    private Button btnTest1,btnTest2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_test);

        initView();
        setClickLinear();
    }

    private void initView(){
        btnTest1=(Button)findViewById(R.id.btnTest1);
        btnTest2=(Button)findViewById(R.id.btnTest2);
    }

    private void setClickLinear(){
        btnTest1.setOnClickListener(this);
        btnTest2.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()){
            case R.id.btnTest1:

                break;
            case R.id.btnTest2:

                break;
        }
    }

    private void showButton1(){
        btnTest1.setVisibility(View.VISIBLE);
    }

    private void hiddenButton1(){
        btnTest2.setVisibility(View.GONE);
    }

    private void showButton2(){
        btnTest2.setVisibility(View.VISIBLE);
    }

    private void hiddenButton2(){
        btnTest2.setVisibility(View.GONE);
    }
}

 你能见到在这里段编码里边,我只是要想简易的完成:点一下按键1的情况下掩藏按键2,点一下按键2的情况下掩藏按键1;实际上逻辑性是非常简单的,大家只必须分离界定好四个方式就可以了。可是如果我现在倘若该activity里边也有别的要求:1.我要网页页面一运行的情况下就要求4张广告图;2.正中间有一个gradview想要你去添充9宫格;3.必须依据客户种类表明不一样的等级內容;那样一想得话,大家有可能就逐渐依照必须啪啪在Activity里边界定好有关的方式,随后再再加上一个AsyncTask用以后台管理http要求,没有错它是常见的逻辑思维。可是大家如今好好来剖析一下便会发觉,Activity里边沉积的物品太多了,有哪些方法可以给它减肥呢?这个时候就到MVP隆重登场了。请看下面的编码:

public interface ITestMVP {

    void showButton1();
    void showButton2();
    void hiddenButton1();
    void hiddenButton2();
}

 最先大家界定一个插口,用以出示Activity里边所必须采用的方式协议书。随后大家必须在该Activity完成这一插口,类界定以下:

public class MyTestActivity extends Activity implements View.OnClickListener,ITestMVP {
    @Override
    public void showButton1() {

    }

    @Override
    public void showButton2() {

    }

    @Override
    public void hiddenButton1() {

    }

    @Override
    public void hiddenButton2() {

    }
}

 能够见到大家这个时候就应当在Activity里边重写如上四个方式,最后一步就应当将Presenter界定出去。实际上Presenter的最关键的功效便是分离出来Activity UI层的实际操作和后台管理编码的耦合度。可以看Presenter编码:

public class TestMvpPresenter {

    private ITestMVP iTestMVP;

    public TestMvpPresenter(ITestMVP iTestMVP) {
        this.iTestMVP = iTestMVP;
    }

    public void Button1Click(){
        iTestMVP.showButton1();
        iTestMVP.hiddenButton2();
    }

    public void Button2Click(){
        iTestMVP.showButton2();
        iTestMVP.hiddenButton1();
    }
}

 这个时候你能发觉,实际上全部的有关实际操作大家都早已提炼出到Presenter里边。那样的话,我也不但将UI和Model分离了,另外如果有别的有关的实际操作,大家还能够界定别的的Adapter。进而根据Presenter黏合好几个解决逻辑性的作用。另外如果我们在好几个网页页面中间是同样的解决逻辑性得话,那麼就认为我们可以同用同一个Presenter。是否非常简单呢?最终使我们讨论一下,在Activity的onCreate方式里边启用的编码:

TestMvpPresenter testMvpPresenter=new TestMvpPresenter(this);

       好啦,今日就到这吧!若有不对,热烈欢迎拍砖。

 

    关键字:

天才代写-代写联系方式