意圖
將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由於接口不兼容
而不能一起工作的那些類可以一起工作。
別名
包裝器Wrapper
動機
有時,爲複用而設計的工具箱類不能夠被複用的原因僅僅是因爲它的接口與專業應用領
域所需要的接口不匹配。
適用性
- 你想使用一個已經存在的類,而它的接囗不符合你的需求。
- 你想創建一個可以複用的類,該類可以與其他不相關的類或不可預見的類(即那些接口可能不一定兼容的類)協同工作。
- 僅適用於對*Adapter)你想使用一些已經存在的子類,但是不可能對每一個都進行子類化以匹配它們的接口。對象適配器可以適配它的父類接口。
標準結構
參與者
Target(Shape)
一定義Client使用的與特定領域相關的接口0
·Client(DrawingEditor)
一與符合Target接口的對象協同。
·Adaptee(TextView)
一定義一個已經存在的接口,這個接口需要適配。
.Adapter(TextShape)
一對Adaptee的接口與Target接口進行適配
效果
類適配器和對象適配器有不同的權衡。
類適配器
·用一個具體的Adapter類對Adaptee和Target進行匹配。結果是當我們想要匹配一個類以
及所有它的子類時,類Adapt“將不能勝任工作。
.使得Adapter可以重定義Adaptee的部分行爲,因爲Adapter是Adaptee的一個子類。
·僅僅引人了一個對象,並不需要額外的指針以間接得到adaptee。
對象適配器
.允許一個Adapter與多個Adaptee—即Adaptee本身以及它的所有子類(如果有子類的話)
一同時工作。Ad即斷也可以一次給所有的Adap虻e添加功能。
·使得重定義Adap艹的行爲比較困難。這就需要生成Adaptee的子類並且使得Adapter引用
這個子類而不是引用Adaee本身。
其他需要考慮的一些因素:
Adapter的匹配程度
可插入的Adapter
使用雙向適配器提供透明操作