? ? ? ? ? ?在我們Android實際開發(fā)中,通常會遇到列表中有多中不同樣式,這個時候,常用的MVC模式就使得我們的adapter適配器臃腫不堪,代碼簡潔性就是無稽之談了,所以我們今天介紹的就是MVP模式在實際開發(fā)中的應用。
? ? ? ? ? 首先我說下我所理解的MVP模式:我所理解的MVP是由MVC模式優(yōu)化衍生出來的一種模式,MVP將MVC中的Controller層進行了優(yōu)化生成了Presenter。Presenter的意思就是提出者,Presenter層和MVC的Controller一樣,負責事務核心邏輯,但不一樣的是Presenter是通過接口回調(diào)進行數(shù)據(jù)傳遞,并阻斷了View和Model的直接聯(lián)系,這樣使View和Model專注于自身的業(yè)務邏輯,這樣的好處就是讓我們在處理復雜的事務邏輯的時候相互之間充分解耦。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ~~~~~~~~下面是MVP模式圖~~~~~~~~~~

? ? ? ? 比如我在工作中就有一個這樣的需求,在列表中有多種不同的樣式比如視頻,圖片,文字加圖片以及各種別的類型的item,各自item有著自己的事務。在這樣的情況下,如果我們采用MVC模式去做這件事,會發(fā)現(xiàn)我們的adapter,哇,簡直不能再難看了,所以呢用MVP就使得適配器簡潔而便于各自的事務邏輯。下面讓我們用代碼說話吧,來吧皮皮蝦~~

首先adapter中我們定義上多種類型的顯示,每一個類型就代表著數(shù)據(jù)中的一個model對應的一個view,這個時候如果還是采用MVC模式的話,那么在CreatView中我們的adapter會變得異常的臃腫,為了使得我們的緩存得到充分的利用把view和model解耦開來,我們需要一個baseviewholder

? ? ?BaseviewHolder使用泛型使得model可以使用任意類型的對象,onBind就是我們綁定數(shù)據(jù)的方法,這樣就多處可以使用,非常的方便?,F(xiàn)在有了我們的泛型holder對象,現(xiàn)在需要一個管理holder的東東,同時適配器adapter中的對應的數(shù)據(jù)類型需要我們傳遞進去。


? ?好了這個就是我們用于管理viewholder的Factory,說到這里大家應該都明白了吧,正如MVP模式示意圖view和model解耦,view中的事務邏輯對應model變化?,F(xiàn)在我們的適配器就不用那么臃腫,現(xiàn)在變得簡潔,更易維護,在實際開發(fā)中,版本的變化非常快,良好的設計模式,對應開發(fā)者的工作效率提升技能提升是一種很好的促進。下面看一下適配器的綁定數(shù)據(jù)

現(xiàn)在是不是很簡潔,很賞心悅目,如果我們使用的MVC模式去做這件事,那么在CreatView中,可以想象,那是一種煎熬。在我們的類型中反射出我們數(shù)據(jù)中對應的類型,好了下面介紹一下view,我們的view就是一個個的BaseviewHolder,自然需要繼承BaseviewHolder,下面給出一個示例

? ?到此為止,已經(jīng)介紹完畢,從MVC到MVP一種優(yōu)雅的提升。非常感謝感謝大家的閱讀,希望對大家有一點點的促進作用,下面附上APP中運行效果。

