意圖:將乙個類的藉口轉換成客戶希望的另外乙個介面。使得原來由於介面不相容而不能一起工作的那些類可以一起工作。
適用性:
1 想使用乙個已經存在的類,而它的藉口不符合你的需求
2 建立乙個可以復用的類,該類可以與其他不相關的類或不可預見的類協同工作
3 (僅適用於物件adapter)使用一些已經存在的子類,但是不可能對每乙個都進行子類化以匹配它們的介面。物件介面卡可以適配它的父類介面。
結構:類介面卡使用多重繼承對乙個介面與另乙個介面進行匹配。用c++實現時,adapter應該採用公共方式繼承target類,並且用私有方式繼承adaptee。所以,adapter類應該是target的子型別,但不是adaptee的子型別。
物件介面卡依賴於物件組合,將adaptee的乙個例項作為adapter類中乙個成員,從而對adapter的操作,轉而呼叫adaptee類的操作。
這種模式也可以提供那些被匹配的淚所沒有提供的功能。
以下為書上98頁例子:將textview適配shape的介面,有兩種實現,一種構造乙個類介面卡,一種是物件介面卡
#include using namespace std;
//點結構體
struct point
private:
int _x;
int _y;
};class shape;
class textshape;
//控制器,可以對shape進行操控
class manipulator
};class textmanipulator : public manipulator
};//介面
class shape
virtual void boundingbox(point& bottomleft, point& topright) const
virtual manipulator* createmanipulator() const
};//adaptee,不相容的類,通過textshape進行適配
class textview
void getorigin(int x, int y) const
void getextent(int width, int height) const
virtual bool isempty() const
};//adapter,使textview適合shape的介面 ,這是個類介面卡,
// 通過public繼承介面,private繼承實現
class textshape : public shape, private textview
virtual void boundingbox(point& bottomleft, point& topright) const
bool isempty() const
manipulator* createmanipulator() const
};//物件介面卡,包含了乙個要適配的物件
class textshape1 : public shape
virtual void boundingbox(point& bottomleft, point& topright) const
bool isempty() const
manipulator* createmanipulator() const
private:
textview* _text;
};
結構型模式 介面卡模式
介面卡模式 將乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。介面卡模式角色目標 targe 角色 該角色定義要轉換成的目標介面 源 adaptee 角色 需要被轉換成目標角色的源角色 介面卡 adapter 角色 該角色是介面卡模式的核心,...
結構型模式 介面卡模式
將乙個類 adaptee 的介面轉換成客戶 client 希望的另外乙個介面 target 為什麼要適配 須要的東西已做好,可是不能用。短時間又不能改造。想辦法適配它。使得原本因為介面不相容而不能一起工作的那些類能夠一起工作。姚明說漢語,其它隊員和教練說英語,他們不能溝通交流。團隊就不能非常好地合作...
結構型模式 介面卡模式
目錄 1.概述 1.1 定義 1.2 作用 1.3 應用場景 2.類圖 2.1 類介面卡模式類圖 2.2 物件介面卡模式類圖 3.角色 4.例項 4.1 類介面卡 4.2 物件介面卡 5.3 兩者的區分 5.優缺點 5.1 優點 5.2 缺點 也可以作為物件結構型模式。介面卡模式可以將乙個類的介面和...