Adapter模式 設計模式學習筆記

2021-09-08 02:44:11 字數 2050 閱讀 9422

adapter模式

一 意圖

將乙個類的介面轉換成客戶希望的另外乙個介面。

adapter模式使得原本由於介面不相容而不能在一起工作的那些類可以在一起工作。

二 動機

為復用而設計的通用的類,總是存在一些特殊的情況,使其不能夠使用或者完成相應的擴充套件性的功能。

textview是呈現文字的,並不支援圖形編輯的方式,新增加textshape,是無法直接使用textview中的方法,

但同時還要存在shape的操作,或許還要新增加特性或者操作,這些都要求必須要新增加乙個類來完成這些功能。

為了能夠使用到textview中已經存在對於文字的處理方法,就需要繼承textview或者組合textview物件。

三 適用性和結構

使用乙個已經存在的類,但是介面不符合要求

建立乙個可以復用的類,與其他不相關的類協同工作

物件介面卡適配父類介面 

繼承方式——類介面卡:

組合方式——物件介面卡:

繼承和組合這兩種方式還是有些區別的,需要權衡:

1 類介面卡

只能保證adapter所匹配的基類adaptee是能夠勝任的,對於adaptee基類所派生下來的子類並一定能夠完全勝任。

adapter能夠重新定義基類的方法和擴充套件自己的方法

僅僅引入乙個物件,並不需要額外指標以間接得到adaptee。

2 物件介面卡

乙個adapter可以對應adaptee本身及其子類

能夠進行擴充套件,但如果對於基類本身及其子類修改該比較麻煩的

3 深度探索

adapter的匹配程度工作量,取決於target和adaptee相似程度

可插入的介面卡:能將介面卡運用到系統中

雙向匹配器:與被匹配的類都相容,都可以工作。

四 **實現

1實現顏色亮度可變燈:

有一盞燈其顏色可變,但是現在要求其明亮度也可變,明亮度是由電壓和顏色共同決定的。需要乙個介面卡來完成這個工作。

電壓轉換器

class voltageconveter

void adjustvoltage(int rate){}

private:

int m_voltage;

};

//

彩色燈class colourlight

private:

int m_colortype;

};

//

類介面卡

class brightadapter: public colourlight,public voltageconveter

int getlightness(){}

private:

int m_lightness;

};

2  手機上的文字編輯框控制項實現所以要將文字顯示和輸入法結合起來才能實現文字編輯框。同時文字編輯框又需要新增自己的特性,以及配合輸入法的使用。

大概的結構圖如下:

設計模式 Adapter

adapter設計模式本身並沒有什麼特別,直觀地說就是介面封裝,在使用到第三方庫時我們常常用到,第三方庫提供的介面過於全面,引數過多,在我們實際應用中可能不會用到,通過進一步封裝,提供很好的實際介面。class target class adapter class adaptee 基本上就是三個類協...

設計模式 Adapter

類adapter include using namespace std class cadaptee virtual cadaptee public void func1 virtual ctarget public virtual void func 0 class cadapter publi...

設計模式 Adapter

意圖 使控制範圍之外的乙個原有物件與某個介面匹配。問題 系統的資料和行為都正確,但介面不符。通常用於必須從抽象類派生時。實現 將原有類包含在另一類中。讓包含類與需要的介面匹配,呼叫被包容類的方法。adapter模式有兩種型別 物件adapter模式 依賴於乙個物件 適配物件 包含另乙個物件 被適配物...