1. 程式人生 > >15、C語言和設計模式(介面卡模式)

15、C語言和設計模式(介面卡模式)

【 宣告:版權所有,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】

    現在的生活當中,我們離不開各種電子工具。什麼膝上型電腦、手機、mp4啊,都離不開充電。既然是充電,那麼就需要用到充電器。其實從根本上來說,充電器就是一個個普通的介面卡。什麼叫介面卡呢,就是把220v、50hz的交流電壓程式設計5~12v的直流電壓。充電器就幹了這麼一件事情。
    那麼,這樣的一個充電介面卡,我們應該怎麼用c++描述呢?   

  1. class voltage_12v  
  2. {  
  3. public:  
  4.     voltage_12v() {}  
  5.     virtual ~voltage_12v() {}  
  6.     virtualvoid request() {}  
  7. };  
  8. class v220_to_v12  
  9. {  
  10. public:  
  11.     v220_to_v12() {}  
  12.     ~v220_to_v12() {}  
  13.     void voltage_transform_process() {}  
  14. };  
  15. class adapter: public voltage_12v  
  16. {  
  17.     v220_to_v12* pAdaptee;  
  18. public:  
  19.     adapter() {}  
  20.     ~adapter() {}  
  21.     void request()   
  22.     {  
  23.         pAdaptee->voltage_transform_process();  
  24.     }    
  25. };  

    通過上面的程式碼,我們其實可以這樣理解。類voltage_12v表示我們的最終目的就是為了獲得一個12v的直流電壓。當然獲得12v可以有很多的方法,利用介面卡轉換僅僅是其中的一個方法。adapter表示介面卡,它自己不能實現220v到12v的轉換工作,所以需要呼叫類v220_to_v12的轉換函式。所以,我們利用adapter獲得12v的過程,其實就是呼叫v220_to_v12函式的過程。

    不過,既然我們的主題是用c語言來編寫介面卡模式,那麼我們就要實現最初的目標。這其實也不難,關鍵一步就是定義一個Adapter的資料結構。然後把所有的Adapter工作都由Adaptee來做,就是這麼簡單。不知我說明白了沒有?

  1. typdef struct _Adaptee  
  2. {  
  3.     void (*real_process)(struct _Adaptee* pAdaptee);  
  4. }Adaptee;  
  5. typedefstruct _Adapter  
  6. {  
  7.     void* pAdaptee;  
  8.     void (*transform_process)(struct _Adapter* pAdapter);  
  9. }Adapter;