幾種結構型設計模式的對比

IT168技術文檔】 

    各種結構型設計模式由於或是採用類繼承機制、或是採用對象組合方式實現,所以很多都具有一定的相似性,下面對比較相似的四組模式進行討論 

    1、適配器Adapter VS 組合Composite 
    相似點:都爲客戶提供了一致性。 
    Adapter通過提供一致性使被適配組件Adaptee和目標組件Target兼容,從而使得這些組件可以一起使用; 
    Composite通過提供一致性使組合對象和單個對象對用戶透明,用戶可以一致的加以使用; 
    不同點: 
    1)效果不同: 
    Adapter主要針對不是一起開發的兩個類,接口不兼容但是後面開發的類正好可以重用前一個類,爲了能夠重用,從而需要通過適配器Adapter進行適配; 
    Composite主要對一個部分-整體的類層結構進行組合,從而便於用戶統一使用,以及增加組件的可擴展性,當需要增加新組件時,組件自動融入類層次結構。 
    2)結構不同: 
    Composite模式可以遞歸進行組合,以組合成非常複雜的組件;Adapter模式無遞歸需求。 

    類結構對比圖如下: 


    2、組合Composite VS 裝飾器Decorator 
    相似點:類結構相似、且都基於遞歸組合 
    Composite模式通過遞歸,組合基元組件爲組合組件,再組合組合組件爲複雜組合組件; 
    Decorator模式通過遞歸,可以動態地爲對象增加多種額外功能或裝飾; 
    不同點: 
    1)目的不同: 
    Composite模式表現部分和整體對象關係,統一基元對象和組合對象的使用; 
    Decorator模式爲了動態的給一個對象添加一些額外的職責; 
    2)結構不同: 
    Composite模式中組合類可能由多個組件(包括基元和組合組件)組成,Composite通常通過容器包含其所容納的對象; 
    Decorator模式一般只通過一個對象引用包含被裝飾得對象,通常一次只裝飾一個對象。 
    類結構對比圖如下: 


    3、裝飾器Decorator VS 代理Proxy 
    相似點:類結構相似,都提供了一定程度的間接性 
    Decorator和被裝飾的組建ConcreteComponent有相同的接口Component,Proxy和被代理的對象RealSubject也有相同的接口Subject。 
    Decorator和Proxy通常都含有一個對象,Decorator對這個對象進行包裝,Proxy對這個對象進行代理。 
    不同點: 
    1)目的不同: 
    Decorator動態的爲一個對象添加一些額外的功能或屬性; 
    Proxy爲對象提供一個代理以便進行相應的控制和管理,如遠程代理爲不在同一地址空間的對象提供本地化代表、虛代理提供    根據需要才創建開銷很大的對象等等; 
    2)結構不同: 
    Decorator可以遞歸裝飾,但Proxy一般並不進行遞歸代理 

    類結構對比圖如下: 


    4、外觀Facade VS 代理Proxy 
    相似點:都提供一定的間接性,Facade可以看作是一個子系統的代理Proxy 
    Facade通過爲子系統提供一個門面,在用戶和子系統之間建立一個方便簡化的使用協議; 
    Proxy爲被代理對象提供間接訪問,從而根據不同的代理類型完成不同管理和控制任務; 
    不同點: 
    1)目的不同: 
    Facade模式爲子系統提供一個高層接口,以達到簡化子系統使用的目的; 
    Proxy爲被代理對象提供間接訪問,從而可以根據不同代理類型提供不同的任務; 
    結構不同: 
    Facade瞭解整個子系統,並把方法調用進行轉發;Proxy模式只代理目標對象,且通常都提供一定的服務。 
類結構對比圖如下: 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章