介面卡模式
將乙個已有的伺服器端應用介面轉換成乙個客戶端程式所期望的介面。
模式涉及的角色有
目標介面(itarget):所期待的介面,這裡是類介面卡模式,因此目標不可以是類。
源(adaptee):需要適配的類
介面卡(adapter):在這裡把源介面轉換為目標介面,顯然這一介面必須是具體的類。
意圖
將乙個類的介面轉換成客戶希望的另外乙個介面。
adapter
模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。
結構圖
1 類的
adapter
模式結構圖
2 物件的
adapter
模式結構圖
包括類介面卡和物件介面卡兩種
1、類介面卡
由於adapter
是adaptee
的子類因此可以在
adapter
中置換(override)
掉adaptee
中的一些方法。但是對於類介面卡,如果用此類適配源的子類就行不通了。
即類介面卡可以置換源的方法,物件介面卡可以同時用於適配源的所有子類,反之則不容易。
2、物件介面卡
這種做法很象貨物的包裝過程,被包裝貨物的真實樣子被包裝所掩蓋和改變。因此有人把這種模式稱為包裝
(wrap)
模式物件介面卡的同乙個介面卡可以適配源也可以適配源的子類。但是與類介面卡相比要想置換掉源類的方法就不容易,如果一定想置換掉源類的某乙個方法就只好先做乙個源類的子類,將源類的方法置換掉然後再把源類的子類作為真正的源進行適配。雖然置換掉源類的方法不容易,但是要增加一些新的方法則方便的很,而且新增加的方法同時適應所有的源及其子類。 //
類介面卡
namespace
designpattern.adapter.classadapter
public
class
adaptee }
public
class
adapter : adaptee,itarget }
} //
物件介面卡
namespace
designpattern.adapter.objectadapter
public
class
adaptee }
public
class
adapter : itarget
public
void
sampleoperation1()
public
void
sampleoperation2() }
} 在這個例子中
adapter
補充了乙個
adaptee
沒有的方法
但不要誤認為介面卡就是補充源角色沒有的方法而設計的。
預設介面卡模式為乙個介面提供預設實現,這樣子型別可以從這個預設實現進行擴充套件,而不必從原有型別進行擴充套件。這樣這個抽象類繼承下去的子類就不必實現所有的方法了。新的類就是
adapter
類而給出缺省實現的抽象類就可以被當作
adaptee
。預設介面卡的目的與普通介面卡的目的不同,
它是為了方便建立乙個不平庸的介面卡類而提供的一種平庸實現。
namespace
designpattern.defaultadapter
public
abstract
class
serviceadapter : iservice
public
virtual
string
serviceoperation2() }
}
介面卡模式(類介面卡 物件介面卡)
做個筆記 引用 public inte ce usb public inte ce psp public class usber implements usb 類介面卡 psp適用usb介面 public class usbadapter extends usber implements psp 物...
介面卡模式 預設介面卡,類介面卡,物件介面卡
模式思想 改變乙個類的對外介面 增加或減少 以滿足不同外部呼叫者的需求 角色成員 目標介面 target 客戶所期待的介面。目標可以是具體的或抽象的類,也可以是介面。需要適配的類 adaptee 需要適配的類或適配者類。介面卡 adapter 通過包裝乙個需要適配的物件,把原介面轉換成目標介面。適配...
設計模式 介面卡模式 類介面卡 物件介面卡
乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...