1. 程式人生 > >適配器模式(C++實現)

適配器模式(C++實現)

由於 .com 應該 接口 argc bubuko 設計 適配器模式 uml

  設計模式,是對軟件設計智慧的結晶,也是每一個開發人員應該學習的。

  適配器模式:將一個類的接口轉換成客戶希望的另外一個接口,使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。

  適配器模式可以分為類適配和對象適配。就開發中實際情況而言,對象適配模式用的相對而言多些,下面筆記中適配器模式就是指對象適配器模式。

  我們開發中用會用各種各樣的協議,如UDP、TCP、Http等,一個系統一般都是有很多模塊構成,如Radio,有Tuner、Webapp、Bt、Power、Hvac等模塊,假如有些模塊使用的協議不同,那我們是不是可以將所有的協議的接口封裝在一個類裏那,然後每個模塊裏定義一個協議類的私有成員變量來調用不通的協議接口,這個不就實現了一個簡單的適配器模式嗎。語言太乏力,我們來看UML類圖吧。

技術分享圖片

再來結合代碼看一眼,也許就明白了:

#include <iostream>
using namespace std;

class ProtocolForest//協議森林
{
public:
    void tcpProtocol()
    {
        cout<<"ProtocolForest::tcpProtocol()"<<endl;
    }
    void udpProtocol()
    {
        cout<<"ProtocolForest::udpProtocol()"<<endl;
    }
    
void httpProtocol() { cout<<"ProtocolForest::httpProtocol()"<<endl; } }; class BaseModule//base類 { public: virtual void connection(void) = 0; }; class Tuner : public BaseModule//Tuner模塊 { private: ProtocolForest m_protocol; public: virtual void connection(void) { m_protocol.tcpProtocol(); cout
<<"Tuner::connection()"<<endl; } }; class Power : public BaseModule//Power模塊 { private: ProtocolForest m_protocol; public: virtual void connection(void) { m_protocol.udpProtocol(); cout<<"Power::connection()"<<endl; } }; class Webapp : public BaseModule//webapp模塊 { private: ProtocolForest m_protocol; public: virtual void connection(void) { m_protocol.udpProtocol(); cout<<"Webapp::connection()"<<endl; } }; int main(int argc, char** argv) { BaseModule* moduleA = new Webapp(); moduleA->connection(); moduleA = new Tuner(); moduleA->connection(); delete moduleA; return 0; }

輸出如下:

技術分享圖片

適配器模式(C++實現)