android中深入淺出了解MVP模式

什么是MVP模式?

MVP毒返?啥租幕,這還用介紹,相信看球的朋友對(duì)這個(gè)應(yīng)該毫不陌生吧拧簸。不就是 Most Valuable Player劲绪,最有價(jià)值球員嘛。所以當(dāng)初看到這個(gè)詞時(shí)也是一種莫名的親切感。不過此MVP可非彼MVP贾富,我們今天要討論的MVP其實(shí)同MVC一樣歉眷,是一種編程模式和思想,也許更準(zhǔn)確地講是一種架構(gòu)颤枪。

既然原來大家MVC用的好好的汗捡,為啥突然要冒出一個(gè)MVP呢?說明MVC自然有自己的缺陷汇鞭。因?yàn)锳ndroid的特殊性凉唐,使得Activity對(duì)應(yīng)了MVC中的V和C,同時(shí)擔(dān)任兩個(gè)角色,就有了類似“既當(dāng)?shù)之?dāng)媽”的感覺霍骄,這顯然就不符合軟件設(shè)計(jì)原則的“單一職責(zé)”原則台囱。但現(xiàn)實(shí)中是很多的APP代碼中有這么的處境,特別是Androi原生的很多系統(tǒng)APK读整,某些Activity動(dòng)則幾千行代碼簿训。 況且,隨著項(xiàng)目的深入發(fā)展米间,很多邏輯很越來越復(fù)雜强品,Activity處理的東西也會(huì)越來越多,代碼越來越臃腫屈糊。這樣一來維護(hù)起來的代價(jià)就會(huì)越來越高的榛。為了解耦,所以MVP模式應(yīng)用而生逻锐。

MVP如何解耦夫晌?

MVP的架構(gòu)圖如下
image.png
關(guān)于三者的關(guān)系,用一個(gè)簡(jiǎn)單的例子進(jìn)行理解昧诱,就是開發(fā)商晓淀,明星和經(jīng)紀(jì)人。開發(fā)商想找明星進(jìn)行代言某個(gè)品牌盏档,但是明星每天應(yīng)酬很忙啊不可能所有事都自己處理的凶掰,所以開發(fā)商需要找到明星的經(jīng)紀(jì)人進(jìn)行溝通,由經(jīng)紀(jì)人再來傳達(dá)意思給明星蜈亩。這里開發(fā)商和明星之間是沒有聯(lián)系的懦窘,而是通過人中間的經(jīng)紀(jì)人進(jìn)行溝通。Presenter就是這個(gè)經(jīng)紀(jì)人的角色勺拣。

好吧奶赠,扯了一大堆有的沒的,具體代碼中如何去實(shí)現(xiàn)呢药有。這里我通過一個(gè)簡(jiǎn)單輸入賬號(hào)及密碼的登錄過程去詳細(xì)介紹毅戈。

UI方面很簡(jiǎn)單苹丸,一個(gè)用戶名輸入框,一個(gè)密碼輸入框苇经,點(diǎn)擊登錄后赘理,彈出progressbar.
image.png

M層:

首先是M層的代碼編寫,M層主要是一些業(yè)務(wù)邏輯扇单,這里只有登錄商模。所以新建一個(gè)接口只需要定義一個(gè)登錄的方法。參數(shù)方面蜘澜,傳入用戶名施流,密碼以及登錄結(jié)果的回調(diào)。
image.png

然后是登錄結(jié)果的接口鄙信,只有成功和失敗兩種結(jié)果瞪醋。


image.png

接著新建一個(gè)Login類去具體實(shí)現(xiàn)ILogin接口,點(diǎn)擊登錄后装诡,progressbar開始轉(zhuǎn)圈银受,默認(rèn)用戶名admin,密碼123,如果正確回調(diào)登錄成功方法鸦采,并傳入用戶信息宾巍。錯(cuò)誤回調(diào)登錄失敗方法。


image.png

至此M層代碼便已經(jīng)OK渔伯,是不是覺得很簡(jiǎn)單呢顶霞。

V層:

哪些需要放在V層代碼中呢,比如獲取設(shè)置用戶名锣吼,密碼确丢,顯示隱藏progressbar,設(shè)置登錄按鈕是否可點(diǎn)擊狀態(tài),登錄成功后跳轉(zhuǎn)界面吐限,登陸失敗的吐司提示等直觀上的界面操作就應(yīng)該放在這里。直接上代碼褂始,還是先定義VIEW層接口


image.png

然后我們具體的activity去實(shí)現(xiàn)這個(gè)接口诸典,具體實(shí)現(xiàn)方法就可以了。

image.png
image.png

P層:

好吧崎苗,最關(guān)鍵的到了狐粱。P層該如何把M層和V層關(guān)聯(lián)起來呢。既然P層是中間人胆数,首先肯定應(yīng)該持有M層和V層的對(duì)象肌蜻。P層到時(shí)肯定實(shí)在V層被創(chuàng)建,所以可以通過構(gòu)造函數(shù)進(jìn)行獲取V層必尼,既然是解耦蒋搜,所以M層不能通過構(gòu)造函數(shù)獲取篡撵。直接一個(gè)登錄的方法,顯示progressbar豆挽,如果登錄按鈕的狀態(tài)可用就調(diào)用M層中的登錄育谬。這里應(yīng)該很直觀了,調(diào)用M層的登錄方法帮哈,里面的賬號(hào)和密碼調(diào)用V層的方法獲取膛檀,這樣就把M層和V層聯(lián)系到了一起。

image.png

最后在activity中創(chuàng)建presenter對(duì)象娘侍,然后在點(diǎn)擊登錄按鈕的時(shí)候調(diào)用presenter的登錄方法就可以了


image.png

大功告成看看效果:

image.png
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咖刃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子憾筏,更是在濱河造成了極大的恐慌嚎杨,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踩叭,死亡現(xiàn)場(chǎng)離奇詭異磕潮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)容贝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門自脯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斤富,你說我怎么就攤上這事膏潮。” “怎么了满力?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵焕参,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我油额,道長(zhǎng)叠纷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任潦嘶,我火速辦了婚禮涩嚣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘掂僵。我一直安慰自己航厚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布锰蓬。 她就那樣靜靜地躺著幔睬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芹扭。 梳的紋絲不亂的頭發(fā)上麻顶,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天赦抖,我揣著相機(jī)與錄音,去河邊找鬼澈蚌。 笑死摹芙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宛瞄。 我是一名探鬼主播浮禾,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼份汗!你這毒婦竟也來了盈电?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤杯活,失蹤者是張志新(化名)和其女友劉穎匆帚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旁钧,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吸重,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了歪今。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嚎幸。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖寄猩,靈堂內(nèi)的尸體忽然破棺而出嫉晶,到底是詐尸還是另有隱情,我是刑警寧澤田篇,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布替废,位于F島的核電站,受9級(jí)特大地震影響泊柬,放射性物質(zhì)發(fā)生泄漏椎镣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一兽赁、第九天 我趴在偏房一處隱蔽的房頂上張望衣陶。 院中可真熱鬧,春花似錦闸氮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至授翻,卻和暖如春或悲,著一層夾襖步出監(jiān)牢的瞬間孙咪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工巡语, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翎蹈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓男公,卻偏偏與公主長(zhǎng)得像荤堪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子枢赔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容