面向對象適配器將一個接口轉換成另一個接口,以符合客戶的期望。
// 用火雞來冒充一下鴨子class Duck
{
public:virtual void quack() = 0;virtual void fly() = 0;
};class Turkey
{
public:virtual void gobble() = 0;virtual void fly() = 0;
};class TurkeyAdapter : public Duck
{
private:Turkey* turkey;public:TurkeyAdapter(Turkey* turkey){this->turkey = turkey;}virtual void quack(){turkey->gobble();}virtual void fly(){turkey->fly();}
};
- 客戶通過目標接口調用適配器的方法對適配器發出請求。
- 適配器使用被適配者接口把請求轉換成被適配者的一個或多個調用接口。
- 客戶接收到調用的結果,但并未察覺這一切是適配器在起轉換作用。
適配器模式將一個類的接口,轉換成客戶期望的另一個接口。適配器讓原本不兼容的類可以合作無間。
實際上,適配器有兩種,前面介紹的是“對象” 適配器。下面則是“類”適配器。
?接下來會馬上介紹外觀模式,我們在這里可以通過模式的設計意圖區分裝飾者、適配器和外觀模式。
- 裝飾者:不改變接口,但加入責任
- 適配器:將一個接口轉換成另一個接口
- 外觀:讓接口更簡單(提供子系統的一個簡化接口)
假如你組裝了一套家庭觀影系統,內含DVD播放器、投影機、自動屏幕、環繞立體聲和爆米花機。當你想要觀影的時候,必須先執行一些任務,如打開DVA、投影機、屏幕、音響、爆米花機,然后調整好聲音,屏幕大小等。這十分的麻煩,因此,我們可以使用外觀模式,提供一個方法,把以上內容都搞定。
外觀模式提供了一個統一的接口,用來訪問子系統中的一群接口。外觀定義了一個高層接口,讓子系統更容易使用。
“最少知識”原則:告訴我們要減少對象之間的交互,只和你的密友談話。(也叫墨忒耳法則)
不要讓太多類耦合在一起,免得修改系統中一部分,會影響到其它部分。就任何對象而言,在該對象的方法內,我們只應該調用屬于以下范圍的方法:
- 該對象本身
- 被當作方法的參數而傳進來的對象
- 此方法所創建或實例化的任何對象
- 對象的任何組件
?1