天天看點

跨戰區模式PK(總結)

建立類模式描述如何建立對象,行為類模式關注如何管理對象的行為,結構類模式則看重于如何建立一個軟體結構,雖然三種模式的着重點不同,但是在實際應用中還是有重疊的,會出現一種模式适用,另外一種模式也适用的情況。

一、政策模式VS橋梁模式

政策模式是一個行為模式,旨在封裝一系列的行為,封裝的格式(算法)不同,行為也就不同;而橋梁模式則是解決在不破壞封裝的情況下如何抽取出它的抽象部分和實作部分,它的前提是不破壞封裝,讓抽象部分和實作部分都可以獨立地變化。橋梁模式必然有兩個“橋墩”——抽象化角色和實作化角色,隻要橋墩搭建好,橋就有了,而政策模式隻有一個抽象角色,可以沒有實作,也可以很多實作。

二、門面模式VS中介者模式

其實這兩者差別還是比較明顯的,門面模式是以封裝和隔離為主要任務,而中介者模式則是以調和同僚類之間的關系為主,因為要調和,是以具有了部分的業務邏輯控制。

1、功能差別

門面模式隻是增加了一個門面,它對子系統來說沒有增加任何的功能,子系統若脫離門面模式是完全可以獨立運作的。而中介者模式則增加了業務功能,它把各個同僚類中的原有耦合關系移植到了中介者,同僚類不可能脫離中介者而獨立存在,除非是想增加系統的複雜性和降低擴充性。

2、知曉狀态不同

對門面模式來說,子系統不知道有門面存在,而對中介者來說,每個同僚類都知道中介者存在,因為要依靠中介者調和同僚之間的關系,它們對中介者非常了解。

3、封裝程式不同

門面模式是一種簡單的封裝,所有的請求處理都委托給子系統完成。而中介者模式則需要有一個中心,由中心協調同僚類完成,并且中心本身也完成部分業務,它屬于更進一步的業務功能封裝。

三、包裝模式群P

有很多模式中的角色是不幹活的,它們隻是充當黔首作用,你有問題,找我,但我不處理,我讓其他人處理。類似這種模式的,這裡統一稱作包裝模式。其包括:裝飾模式、擴充卡模式、門面模式、代理模式、橋梁模式,它們都是通過委托的方式對一個對象或一系列對象施行包裝,有了包裝,設計的系統才更加靈活、穩定,并且極具擴充性。從實作的角度看,它們都是代理的一種具體表現形式,下面來看看它們在使用場景上有什麼差別

1、代理模式主要用在不希望展示一個對象内部細節的場景中,比如一個遠端伺服器不需要把遠端連接配接的所有細節都暴露給外部子產品,通過增加一個代理類,可以很輕松地實作被代理類的功能封裝,此外,代理模式還可以用在一個對象的通路需要限制的場景中,比如AOP。

2、裝飾模式是一種特殊的代理模式,它倡導的是在不改變接口的前提下為對象增強/減弱功能,或者動态添加額外職責。就擴充性而言,它比子類更加靈活,例如在一個已經運作的項目中,可以輕檢地通過增加裝飾類來擴充系統的功能。

3、擴充卡模式的主要意圖是接口轉換,把一個對象的接口轉換成系統希望的另外一個接口,這裡的系統指的不僅僅是一個應用,也可能是某個環境,比如通過接口轉換可以屏蔽外界接口,以免外界接口深入系統内部,進而提高系統的穩定性和可靠性。

4、橋梁模式是在抽象層産生耦合,解決的是自行擴充的問題,它可以使兩個有耦合關系的對象互不影響地擴充,比如對于使用筆畫圖這樣的需求,可以使用橋梁模式設計成用什麼筆畫什麼圖的方案,至于以後需求的變更,如增加筆的類型,增加圖形等,對該設計來說是小菜一碟。

5、門面模式是一個粗粒度的封裝,它提供一個友善通路子系統的接口,不具有任何的業務邏輯,僅僅是一個通路複雜系統的快速通道,沒有它,子系統照樣運作,有了它,隻是更友善通路而已。

繼續閱讀