Adapter 模式
意圖:將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的哪些類可以一起工作。動
意圖:將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的哪些類可以一起工作。
動機:在軟件系統中,由于應用環境的變化,常常需要將“一些現存的對象”放在新的環境中應用,但是新環境要求的接口時這些現在對象所不滿足的。
適用性:
1. 你想使用一個已存在的類,而它的接口不符合你的需求
2. 你想創建一個可以復用的類,該類可以與其他不相關的類或不可預見的類協同工作
3. (僅僅適用于對象適配器)你想使用一些已經存在的子類,但是不可能對每一個都進行子類化以匹配它們的接口。對象適配器可以適配它的父類接口。
結構:
類適配器:

對象適配器:

參與者:
Target : 定義Client使用的與特定領域相關的接口
Client : 與符合Target接口的對象協同
Adaptee:定義一個已經存在的接口,這個接口需要適配
Adapter: 對Adaptee的接口與Target接口進行適配
協作:
Client在Adapter實例上調用一些操作。接著適配器調用Adapter的操作實現請求。
效果:
1. 用一個具體的Adapter類對Adaptee和Target進行適配。結果是當我們想要匹配一個類以及他的子類的時候,類Adapter將不能勝任工作。
2. 使得Adapter可以重新定義Adaptee的部分行為,因為Adapter是Adaptee的子類
3. 僅僅引入一個對象,并不需要額外的指針以間接得到Adaptee
4. 允許一個Adapter與多個Adaptee-Adaptee本身以及它的所有子類同時工作,Adapter也可以一次給所有的Adaptee添加功能。
5. 使得重定義Adaptee的行為比較困難。
實現:
代碼示例如下:
#include <iostream>nclass ITarget{npublic:n virtual ~ITarget(){}n virtual void Process() = 0;nnprotected:n ITarget(){}n};nclass Adaptee{npublic:n void OldInterface(){n std::cout << "exec " << std::endl;n }n};nclass Adapter : public ITarget{npublic:n Adapter(Adaptee *_p){n _adaptee = _p;n }n void Process(){n _adaptee->OldInterface();n }nprivate:n Adaptee *_adaptee;n};nint main(int argc,char *argv[])n{n Adaptee *_p = new Adaptee;n ITarget *target = new Adapter(_p);n target->Process();n delete _p;n delete target;n return 0;n}n
上一篇:0822








