Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android編程入門 >> android開發系列之MVP設計模式

android開發系列之MVP設計模式

編輯:Android編程入門

      最近在開發一個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);

       好了,今天就到這吧!如有不對,歡迎拍磚。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved