一. 定義
介面卡模式將乙個類的介面轉換成客戶希望的另外乙個介面,使得原本由於介面不相容而不能一起工作的那些類可以一起工作。
adapter 模式的兩種類別:類模式和物件模式。
二. 舉例說明
實際中,我們為了完成某項工作購買了乙個第三方的庫來加快開發。這個庫可能都是一些.dll檔案,這就帶來了乙個問題!我們在應用程式中已經設計好了介面,與這個第三方提供的介面不一致,為了使得這些介面不相容的類(不能在一起工作)可以在一起工作了,adapter模式提供了將乙個類(第三方庫)的介面轉化為客戶(購買使用者)希望的介面的方法。
三. **實現
類模式的adapter採用繼承的方式復用adaptee的介面。
[cpp] //目標類,可以想像成客戶所期代的介面
class target
virtual ~target()
virtual void request()
};
//被適應者,可以看成 dll 提供的介面
class adaptee
virtual ~adaptee()
void specificrequest()
};
//介面卡類,通過在內部包裝被適應者物件 adaptee
//把源介面(specificrequest)轉換成目標介面(request)
class adapter: public target, private adaptee
};
//測試**
int main(int argc,char* ar**)
//目標類,可以想像成客戶所期代的介面
class target
virtual ~target()
virtual void request()
};//被適應者,可以看成 dll 提供的介面
class adaptee
virtual ~adaptee()
void specificrequest()
};//介面卡類,通過在內部包裝被適應者物件 adaptee
//把源介面(specificrequest)轉換成目標介面(request)
class adapter: public target, private adaptee
};//測試**
int main(int argc,char* ar**)
物件模式的adapter中則採用組合的方式實現adaptee的復用。
[cpp] //目標類 www.2cto.com
class target
virtual void request()
};
//被適應類
class adaptee
void specificrequest()
};
//介面卡類,用於轉接兩者的介面
class adapter:public target
void request()
private:
adaptee* _ade;
};
//測試**
int main(int argc,char* ar**)
//目標類
class target
virtual void request()
};//被適應類
class adaptee
void specificrequest()
};//介面卡類,用於轉接兩者的介面
class adapter:public target
void request()
private:
adaptee* _ade;
};//測試**
int main(int argc,char* ar**)
四. 說明
1. 當介面不同時,首先不應該考慮用介面卡,而是應該考慮通過重構統一介面。
2. 使用介面卡模式是無奈之舉,通常在軟體開發後期或維護期再考慮使用。
作者 lwbeyond
設計模式C 描述
一.概念 單例模式 其意圖是保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點,該例項被所有程式模組共享。cpp class csingleton 私有建構函式,防止例項化 private csingleton 私有靜態指標變數,指向類的唯一例項 private static csingleto...
設計模式C 描述
一.概述 在物件導向系統的設計何實現中,建立物件是最為常見的操作。這裡面就有乙個問題 如果乙個應用程式使用了太多的物件,就會造成很大的儲存開銷。特別是對於大量輕量級 細粒度 的物件,比如在文件編輯器的設計過程中,我們如果沒有為字母建立乙個物件的話,系統可能會因為大量的物件而造成儲存開銷的浪費。例如乙...
設計模式 簡介 C 描述
second60 20180424 設計模式,在物件導向設計語言中,是非常重要的思想。無論是架構設計,還是在平常的功能開發,用了設計模式,會如虎添冀。如擴充套件性方面,一些設計模式,新加乙個類繼承原有父類,即可不修改 的情況,支援了新的功能。下面,我會歸納總結下23種設計模式,網上也有很多例子,盡量...