【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模式只代理目標對象,且通常都提供一定的服務。
類結構對比圖如下: