Adapter模式(適配器模式 結構型)

1.意圖:將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由於接口不兼容而不能一起工作得那些類可以一起工作。

2.別名:包裝器Wrapper。

3.動機:有些工具類不能被複用的原因僅僅是因爲它的接口與專業應用領域所需要的接口不匹配。

舉個栗子。(發覺這個栗子好難舉啊,還是用下別人的好了)

有一個繪圖編輯器,這個編輯器允許用戶繪製和排列基本圖元(線、多邊形和正文等)生成圖片和圖表。這個繪圖編輯器的關鍵抽象是圖形對象。圖形對象有一個可編輯的形狀,並可以繪製自身。圖形對象的接口由一個稱爲Shape的抽象類定義。繪圖編輯器爲每一種圖像對象定義了一個Shape的子類:LineShape類對應於直線,PolygonShape類對應於多邊形,等等。

像LineShape和PolygonShape這樣的基本幾何圖形的類比較容易實現,但是對於可以顯示和編輯正文的TextShape子類來說,實現相當困難,因爲即使是基本的正文編輯也要涉及到複雜的屏幕刷新和緩衝區管理。同時成品的用戶界面工具箱可能已經提供了一個複雜的TextShape類,但是工具箱的設計者當時沒有考慮Shape的存在,因此TextView和Shape對象不能互換。

我們可以定義一個TextShape類,由它來適配TextView的接口和Shape的接口。我們可以用兩種方法做這件事:1)繼承Shape類的接口和TextView的實現,或2)將一個TextView實例作爲TextShape的組成部分,並且使用TextView的接口實現TextShape。這兩種方法恰恰對應於Adapter模式的類和對象版本。

1)Adapter類適配器版本,依賴於多重繼承


Adapter共有繼承於Target類,私有繼承於Adaptee類,然後用Adaptee的SpecificRequest()函數去實現Request()接口。

2)對象適配器版本,依賴於對象組合


Adapter繼承了Target類,然後增加Adaptee作爲Adapter的成員變量,用adaptee->SpecificRequest()實現Adapter的Request函數。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章