adapter模式主要意圖是將類或介面轉換成客戶期望的介面,從而使得原本不相容、無法在一起工作的介面可以在一起工作。該模式有兩種形式的adapter法,一是繼承方式;二是物件關聯依賴方式。
繼承方式adapter法,相比之下,耦合性更強些,並且畢竟依賴於靜態繼承,如果被適配的物件有多個(派生)版本的話,則在執行時,將無法做到動態適配,因此,如果想要切換適配物件,就必需要重新編譯鏈結。該方式的類關係參考如下:
就adapter的目的來說,adapter物件在使用目的上與被適配的adaptee物件本質上是沒有什麼關係的,因此可以說adapter物件並不是乙個adaptee物件,adapter物件僅僅只是需要adaptee物件的相關功能而已(可以直觀理解為:借個道,從你這路過而已)。繼承方式的adapter的編碼結構參考如下:
1類繼承式的adapter編碼結構參考namespace
adapter2;
7//some code here........(like virtual destructor etc.)
89 };//
class target
1011
class
adaptee
1215
16 };//
class adaptee
1718
class adapter : public
target
19 , private
adaptee
2023
24 }//
class adapter
2526 }//
namespace adapter
前面已述繼承式的adapter相對靈活性不強,而且最重要的問題是耦合性變強了,只要被適配物件有變動就需要重新編譯鏈結。物件關聯依賴方式相比繼承方式更為靈活,並且可以在執行時對於同一系列的adaptee進行動態適配。就設計而言,我們總是希望優先使用組合方式而非繼承。因此,對於adapter,建議優先考慮關聯依賴式。類關係圖參考如下:
1關聯依賴式adapter編碼結構參考namespace
adapter2;
7//some code here........(like virtual destructor etc.)
89 };//
class target
1011
class
adaptee
1215
16 };//
class adaptee
1718
class adapter : public
target
1926
//some code here........27}
28//
some code here........
2930
private
:31 adaptee* getadaptee()
3233
private
:34 adaptee*m_padaptee;
3536 }//
class adapter
3738 }//
namespace adapter
實際上,adapter可以提高**的復用性,可以讓多個互不相干的功能模組協同工作。但是adapter時的難易程度與必要性,有時候也是需要斟酌的。如:待適配的以象極期複雜,而且與期望的物件相似度極低,此時,adapter就比較蛋碎,肯定會花費不少時間與功夫,此時就需要進一步考慮是否真的有這個必要去適配。即:我們在動手前,需要先分析下adapter的代價。這個算是乙個注意點吧。
Adapter 介面卡模式 結構型模式
意圖 將乙個類的介面轉換成客戶希望的另乙個介面。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。要點 1 adapter模式主要應用於 希望復用一些現存的類,但是介面又與復用環境要求不一致的情況 在遺留 復用 類庫遷移等方面非 常有用。2 gof 23 定義了兩種adap...
結構型模式 Adapter(介面卡)模式
定義 將乙個類的介面轉換成客戶端期望的另乙個介面。介面卡模式可以消除由於介面不匹配所造成的類相容性問題。簡單的講就是客戶期望呼叫我們已存的 功能,但客戶已經定義好了自己的介面標準,為了使我們已有的 能適用客戶的介面,所以需要用到介面卡模式。該模式定義的角色有一下三種 介面卡模式主要以兩種方式實現 舉...
設計模式攻略 結構型模式之Adapter模式
概要 adapter模式,中文名為介面卡模式,從字面意思來看不難理解,就是通過模組,介面的包裝和適配達到模組介面相容協作的目的。這算是乙個很簡單的模式,就算你從來沒看過設計模式,從未聽說過adapter模式,聽我後面的介紹後,也許你會很不屑的說,早在我之前設計過的n個專案中,用過這種所謂的adapt...