Adapter模式也叫適配器模式,就是需要一個翻譯
是構造型模式之一,通過Adapter模式可以改變已有類(或外部類)的接口形式。
適用於:是將一個類的接口轉換成客戶希望的另外一個接口。使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。
什么時候使用適配器


1 #include <iostream> 2 using namespace std; 3 4 // Current18 5 // Current220 6 // Adapter 7 8 class Current18v 9 { 10 public: 11 virtual void useCurrent18v() = 0; 12 }; 13 14 class Current220v 15 { 16 public: 17 void useCurrent220v() 18 { 19 cout << "我是220v 歡迎使用" << endl; 20 } 21 }; 22 23 class Adapter : public Current18v 24 { 25 public: 26 Adapter(Current220v *current) 27 { 28 m_current = current; 29 } 30 virtual void useCurrent18v() 31 { 32 cout << "適配器 適配 220v " ; 33 m_current->useCurrent220v(); 34 } 35 protected: 36 private: 37 Current220v *m_current; 38 }; 39 40 41 void main() 42 { 43 Current220v *current220v = NULL; 44 Adapter *adapter = NULL; 45 46 current220v = new Current220v; 47 adapter = new Adapter(current220v); 48 adapter->useCurrent18v(); 49 50 delete current220v ; 51 delete adapter; 52 53 cout<<"hello..."<<endl; 54 system("pause"); 55 return ; 56 }
裝飾者與適配者模式的區別:
1.關於新職責:適配器也可以在轉換時增加新的職責,但主要目的不在此。裝飾者模式主要是給被裝飾者增加新職責的。
2.關於原接口:適配器模式是用新接口來調用原接口,原接口對新系統是不可見或者說不可用的。裝飾者模式原封不動的使用原接口,系統對裝飾的對象也通過原接口來完成使用。(增加新接口的裝飾者模式可以認為是其變種--“半透明”裝飾者)
3.關於其包裹的對象:適配器是知道被適配者的詳細情況的(就是那個類或那個接口)。裝飾者只知道其接口是什么,至於其具體類型(是基類還是其他派生類)只有在運行期間才知道。
要點:
1. 裝飾者和被裝飾對象有相同的超類型。
2. 可以用一個或多個裝飾者包裝一個對象。
3. 裝飾者可以在所委托被裝飾者的行為之前或之后,加上自己的行為,以達到特定的目的。
4. 對象可以在任何時候被裝飾,所以可以在運行時動態的,不限量的用你喜歡的裝飾者來裝飾對象。
5. 裝飾模式中使用繼承的關鍵是想達到裝飾者和被裝飾對象的類型匹配,而不是獲得其行為。
6. 裝飾者一般對組件的客戶是透明的,除非客戶程序依賴於組件的具體類型。在實際項目中可以根據需要為裝飾者添加新的行為,做到“半透明”裝飾者。
適用場景與優缺點:
在以下情況下應當使用裝飾模式:
1.需要擴展一個類的功能,或給一個類增加附加責任。
2.需要動態地給一個對象增加功能,這些功能可以再動態地撤銷。
3.需要增加由一些基本功能的排列組合而產生的非常大量的功能,從而使繼承關系變得不現實。
優點:
1. Decorator模式與繼承關系的目的都是要擴展對象的功能,但是Decorator可以提供比繼承更多的靈活性。
2. 通過使用不同的具體裝飾類以及這些裝飾類的排列組合,設計師可以創造出很多不同行為的組合。
缺點:
1. 這種比繼承更加靈活機動的特性,也同時意味着更加多的復雜性。
2. 裝飾模式會導致設計中出現許多小類,如果過度使用,會使程序變得很復雜。
3. 裝飾模式是針對抽象組件(Component)類型編程。但是,如果你要針對具體組件編程時,就應該重新思考你的應用架構,以及裝飾者是否合適。當然也可以改變Component接口,增加新的公開的行為,實現“半透明”的裝飾者模式。在實際項目中要做出最佳選擇。
