如何快速的寫一個MVP出來

估計很多朋友都會在android面試的時候拿到一張白紙,要你寫一個簡易的MVP模型出來。這里就教大家如何去速成,我們盡量將步驟控制到最小,最易懂,最好記。

  • 定大小

    presenter是老大,model和view是小弟,都要聽presenter的話,誰讓它站最后一排呢。
    所以presenter要管著model和view。

  • 先什么都不要管,把這三個家伙給揪出來

    Presenter是class,兩個小弟是interface

public class Presenter {
}
public interface IModel {
}
public interface IView {
}

   為什么不直接用Model就好了嘛干嘛還要前面加個`I`,其實為了做MVP的統一,Model和Presenter都沒有問題,但是View直接作為接口名,你覺得OK么?所以我這邊就冒著被誤認為在講解Binder的風險,前面加了個`I`,表示這玩意兒他咩的是接口。
   
* ###想像一下,你要做什么事情
你說,我想像我在面試,GUN!
我的意思是,你既然要基于android做一個超簡單的MVP模型,那你總歸要設想一個最簡單的用例。
比如我這邊就想著在屏幕上有個按鈕,然后點擊按鈕,彈出一個Toast。
考慮到我們需要強行引入model層,所以彈出的Toast內容是要User類中的name屬性。

* ###分析想像用例的場景進行事務拆解
  根據上面我想像的用例(當然你可以直接使用我這個簡單的用例),
  我們把對象拆解成人和activity和手機系統。
   > 此處為了快速的寫mvp,會有誤導,其實真實的任務分配是展示任務分配給View,更明確的說是離不開activity的任務分配給view;數據的操作任務分配給model,這一環其實可有可無;剩余的所有業務邏輯任務統統分配presenter。為了促成mvp速成,讀者朋友可以回過頭來再細細品味。

  * 人
    把人需要做的事情,加入到presenter接口中。
    這個用例中,人需要做的是點擊按鈕,那么我們加入一個clickButton的方法(方法的名字可以取你喜歡的,更加貼近業務場景的)
    ```
public class Presenter {
          void clickButton(){
              Log.e("xxx", "you click");
          }
}
  • activity
    activity在MVP中是充當V的,也就是View層。我們所有的View的初始化全都在activity中進行。因此我們把界面展示所需要做的事情都加入到view接口中。
    這個用例中,view需要做的是,當點擊了button之后,會彈出一個Toast,因此我們給出接口方法showToast。

public interface IView {
//既然是交給activity來實現彈出toast,那我們肯定要返回toast具體彈出什么內容
void showToast(String content);
}

  * 手機系統
     除了人和activity之外,其他的就是手機系統需要去干的事情。
     那還剩下的制造toast內容就是由手機系統去做的

public interface IModel {
//既然交給系統來處理需要toast什么內容,那我們處理完肯定需要把這個內容返回出來
String makeToastContent();
}

* ###關聯MVP
   由于presenter需要管著兩個小弟,所以它必須要要有兩個小弟的實例,所以自然而然的想到通過構造方法傳遞。

public class Presenter {
IView iView;
IModel iModel;

void clickButton(){
    Log.e("xxx", "you click");
}

public Presenter(IView view, IModel model) {
    iView = view;
    iModel = model;
}

}

* ###接口實現
   兩個接口,我們依次實現

public class ToastContentMaker implements IModel {
@Override
public String makeToastContent() {
return "you did click!";
}
}

public class MvpActivity extends AppCompatActivity implements IView {

@Override
public void showToast(String content) {
    Toast.makeText(this, content, Toast.LENGTH_LONG).show();
}

}

* ###添加presenter邏輯
  將presenter的邏輯添加到activity中
Presenter presenter;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    presenter = new Presenter(this, new ToastContentMaker());
    findViewById(R.id.bt_hello).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            presenter.clickButton();
        }
    });
}

* ###最后我們去改一下presenter的clickButton方法

void clickButton(){
Log.e("xxx", "you click");
iView.showToast(iModel.makeToastContent());
}


---------

* ### 總結如下流程
   * 一個P類,兩個接口(```定接口```)
   * 提取view的方法放view接口,數據操作的方法放model接口,其他方法都空實現在P類(```分方法```)
   * Activity實現view接口(```做實現```)
   * 自定義數據操作類實現model接口
   * P類內部持有兩個接口實例。
   * Activity初始化P類,并使用P類方法代替業務邏輯(```補方法```)
   * 順著業務邏輯去P類,調用V和M的接口方法執行業務操作。

-----------
[如何快速的寫一個MVVM出來](http://www.lxweimin.com/p/e4a5b8ebf8a2)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,676評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,730評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,118評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,873評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,266評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,482評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,036評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,846評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,025評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,279評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,684評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,953評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,751評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,016評論 2 375

推薦閱讀更多精彩內容