將乙個類的介面轉換成客戶希望的另外乙個介面。使得原本由於介面不相容而不能一起工作的那些類可以一起工作。
target(目標抽象類):目標抽象類定義客戶所需介面,可以是乙個抽象類或介面,也可以是具體類。
adapter(介面卡類):介面卡可以呼叫另乙個介面,作為乙個轉換器,對adaptee和target進行適配,介面卡類是介面卡模式的核心,在物件介面卡中,它通過繼承target並關聯乙個adaptee物件使二者產生聯絡。
adaptee(適配者類):適配者即被適配的角色,它定義了乙個已經存在的介面,這個介面需要適配,適配者類一般是乙個具體類,包含了客戶希望使用的業務方法,在某些情況下可能沒有適配者類的源**。
根據物件介面卡模式結構圖,在物件介面卡中,客戶端需要呼叫request()方法,而適配者類adaptee沒有該方法,但是它所提供的specificrequest()方法卻是客戶端所需要的。為了使客戶端能夠使用適配者類,需要提供乙個包裝類adapter,即介面卡類。這個包裝類包裝了乙個適配者的例項,從而將客戶端與適配者銜接起來,在介面卡的request()方法中呼叫適配者specificrequest()方法。因為介面卡類與適配者類是關聯關係(也可稱之為委派關係),所以這種介面卡模式稱為物件介面卡模式。
//a需要**感冒
class
persona};
//b需要**頭疼
class
personb};
//c需要**痔瘡
class
personc};
//目標介面
class
target
;//將persona的treatganmao介面適配成treat
class
adapterpersona
:public target
virtual
void
treat()
private
: persona* pperson;};
//將personb的treattouteng介面適配成treat
class
adapterpersonb
:public target
virtual
void
treat()
private
: personb* pperson;};
//將personc的treatzhichuang介面適配成treat
class
adapterpersonc
:public target
virtual
void
treat()
private
: personc* pperson;};
//醫生
class
doctor
void
starttreat()
}private
: list
> m_list;};
//測試
void
test01()
intmain()
優點:
(1)將目標類和適配者類解耦,通過引入乙個介面卡類來重用現有的適配者類,無須修改原有結構。
(2)增加了類的透明性和復用性,將具體的業務實現過程封裝在適配者類中,對於客戶端類而言是透明的,而且提高了適配者的復用性,同乙個適配者類可以在多個不同的系統中復用。
(3)靈活性和擴充套件性都非常好,可以很方便地更換介面卡,也可以在不修改原有**的基礎上增加新的介面卡類,完全符合「開閉原則」。
缺點:介面卡中置換適配者類的某些方法比較麻煩。
(1) 系統需要使用一些現有的類,而這些類的介面(如方法名)不符合系統的需要,甚至沒有這些類的源**。
(2) 想建立乙個可以重複使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。
結構型模式 介面卡模式
介面卡模式 將乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。介面卡模式角色目標 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 缺點 也可以作為物件結構型模式。介面卡模式可以將乙個類的介面和...