存在目地:將乙個類的介面轉換成客戶希望的另外乙個介面。
adapter
模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。
應用場合:由於應用環境的變化,常常需要將「一些現存的物件」放在新的環境中應用,但是新環境要求的介面是這些現存物件所不滿足的。主要應用於「希望復用一些現存的類,但是介面又與復用環境要求不一致的情況」,在遺留**復用、類庫遷移等方面非常有用。
應用例項:ado.net
為統一的資料訪問提供了多個介面和基類,其中最重要的介面之一是
idataadapter
。與之相對應的
dataadpter
是乙個抽象類,它是
ado.net
與具體資料庫操作之間的資料介面卡的基類。
dataadpter
起到了資料庫到
dataset
橋接器的作用,使應用程式的資料操作統一到
dataset
上,而與具體的資料庫型別無關。
生活中的例子,美國的生活用電電壓是
110v
,而中國的電壓是
220v
。如果要在中國使用美國電器,就必須有乙個能把
220v
電壓轉換成
110v
電壓的變壓器。這個變壓器就是乙個
adapter
。
實現方式:
類的介面卡模式
--採用「多繼承」的實現方式,帶來了不良的高耦合,一般不推薦使用
using system;
// 目標角色
target
,客戶所期待的介面
inte***ce itarget
// 源角色
adaptee
,需要適配的類
class adaptee
}//
介面卡adapter
,把源介面轉換成目標介面。這一角色必須是類。
class adapter : adaptee, itarget
}/**
/// client test
///
public class client}
用乙個具體的
adapter
類對adaptee
和taget
進行匹配,結果是當我們想要匹配乙個類以及所有它的子類時,類
adapter
將不能勝任工作。同時因為
adapter
是adaptee
的乙個子類,使得
adapter
可以重定義
adaptee
的部分行為。
物件介面卡模式
--採用「物件組合」的方式,更符合松耦合精神。
using system;
// 目標角色,客戶所期待的介面,可以是具體的或抽象的類,也可以是介面
class target}
// 源角色,需要適配的類
class adaptee
}//
介面卡角色,在內部包裝乙個
adaptee
物件,把源介面轉換成目標介面
class adapter : target
}/**
/// client test
///
public class client}
通過運用
adapter
模式,就可以充分享受進行類庫遷移、類庫重用所帶來的樂趣。
參考資料
:terrylee's tech space
呂震宇部落格
erich gamma
《設計模式可復用物件導向軟體的基礎》
設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...
設計模式學習筆記 介面卡模式
乙個人,想從乙個地方到底另乙個地方,可以通過走路,開車,或者騎自行車等等。假設之前有一條鄉間小路,之前因為路況不好,人們只能通過走路,或者騎自行車通過。於是開發者針對這條路,開發itraffic這個介面,同時實現了 walk,bike這兩個具體類,但隨著經濟的發展,這條路被修建改善,路完全可以通過車...
設計模式學習筆記 介面卡模式
將乙個類的介面轉換成客戶希望的另外乙個介面。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以在一起工作。定義客戶端期待的介面 public class target 定義需要適配的類 public class needadapter 定義介面卡 public class adapt...