1. 意圖
將乙個類的介面轉換成客戶希望的另外乙個介面。 adapter模式使得原本由於介面不相容
而不能一起工作的那些類可以一起工作。
2. 別名
3. 動機
有時,為復用而設計的工具箱類不能夠被復用的原因僅僅是因為它的介面與專業應用領
域所需要的介面不匹配。
4. 適用性
以下情況使用adapter模式
• 你想使用乙個已經存在的類,而它的介面不符合你的需求。
• 你想建立乙個可以復用的類,該類可以與其他不相關的類或不可預見的類(即那些介面
可能不一定相容的類)協同工作。
• (僅適用於物件adapter)你想使用一些已經存在的子類,但是不可能對每乙個都進行
子類化以匹配它們的介面。物件介面卡可以適配它的父類介面。
5. 結構
類介面卡使用多重繼承對乙個介面與另乙個介面進行匹配,如下圖所示。
物件介面卡依賴於物件組合,如下圖所示。
6. 參與者
• target(shape)
— 定義c l i e n t使用的與特定領域相關的介面。
• client(drawingeditor )
— 與符合target介面的物件協同。
• adaptee(textview)
— 定義乙個已經存在的介面,這個介面需要適配。
• adapter(textshape)
— 對adaptee的介面與target介面進行適配
7. 協作
• client在adapter例項上呼叫一些操作。接著介面卡呼叫 adaptee的操作實現這個請求。
8. 效果
類介面卡和物件介面卡有不同的權衡。類介面卡
• 用乙個具體的adapter類對adaptee和target進行匹配。結果是當我們想要匹配乙個類以
及所有它的子類時,類adapter將不能勝任工作。
• 使得adapter可以重定義adaptee的部分行為,因為adapter是adaptee的乙個子類。
• 僅僅引入了乙個物件,並不需要額外的指標以間接得到 adaptee。
物件介面卡則
• 允許乙個adapter與多個adaptee— 即adaptee本身以及它的所有子類 (如果有子類的話)
—同時工作。adapter也可以一次給所有的adaptee新增功能。
• 使得重定義adaptee的行為比較困難。這就需要生成 adaptee的子類並且使得adaptee引用
這個子類而不是引用adaptee本身。
9.案例分析
加入我們有乙個畫圖的類shape,現在我們要實現畫矩形的功能drawrectangle(vector2 origin,int width,int height),引數要求是遠點的位置,矩形寬度,矩形高度
現在有乙個寫好的類textview中有乙個已經實現畫矩形的功能drawrectangle(vector2 lefttop, vector2 rightbottom)引數要求矩形左上角的x,y座標和左下角的x,y座標
如果我們想用textview類來實現shape的畫矩形功能,我們就要為textview寫個shape能使用的介面卡
9.**實現
物件介面卡實現**
shape
public class shape
}
textview
public class textview
}
介面卡類textshapeadapter
public class textshapeadapter:shape
}
類象介面卡實現**
shape和textview**一樣
介面卡類textshapeadapter
public class textshapeadapterex : textview, shape
}
注意c#不可以繼承多個類,但可以繼承多個接 介面卡模式 Adapter
一句話 什麼是adapter adapter 就是乙個轉換器,比如乙個電源插頭可以讓乙個兩插頭的電器使用牆壁上的三插頭電源。這次的介紹將不寫 雖然設計模式是為了 而生,但我認為這是一種看世界的方法,不僅僅是一種 的設計方式,所以這次的介面卡模式因為比較簡單和容易理解就不再寫 解釋,但介面卡的思想能用...
Adapter 介面卡模式
1.概念 介面卡模式 adapter pattern gof95 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。2.兩種形式 a.類的介面卡模式 b.物件的介面卡模式 3.模擬問題 現在假設我們的程式已經設計了介面request介面,但是...
Adapter介面卡模式
adapter介面卡模式是一種結構型模式,主要應對 由於應用環境的變化,常常需要將 一些現存的物件 放在新的環境中應用,但是,新環境要求的介面是現存物件所不滿足的。設計模式 中說道 將乙個類的介面轉換成客戶希望的另乙個介面。adapter模式使得原本由於介面不相容而不能一起工作的類可以一起工作。在實...