設計模式—Adapter模式

來源:互聯網
上載者:User

首先對適配器模式做個簡單的使用說明:

在以下各種情況下使用適配器模式:
1.系統需要使用現有的類,而此類的介面不符合系統的需要。
2.想要建立一個可以重複使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。這些源類不一定有很複雜的介面。
3.(對對象適配器而言)在設計裡,需要改變多個已有子類的介面,如果使用類的適配器模式,就要針對每一個子類做一個適配器,而這不太實際。

其中有兩種基本的方式來實現適配器模式,a、類繼承方式(一),b、對象方式(2)

(圖1)

 

(圖2)

類繼承方式主要通過Adapter繼承Adaptee來從新封裝Adaptee的SpecificRequest到Adapter的Request函數中實現,

對象方式主要通過Adapter中包含Adaptee對象,在Adapter的Request函數中通過調用Adaptee屬性對象來調用SpecificRequest函數

 

其中類繼承方式範例程式碼如下

#include <QtCore/QCoreApplication>#include <iostream>using namespace std;class Target{public:    Target(){}    virtual void request() = 0; /// >子類繼承後實現相應的操作};class Adaptee{public:    Adaptee(){}    void SpecificRequest()    {        cout << " 我是特殊的介面,完成一個一般其他介面完成的不好的功能";    }};class Adapter : public Target , private Adaptee{public:    Adapter(){}    virtual void request()    {        this->SpecificRequest(); /// >我調用特殊對象的功能,因為我繼承了    }};int main(int argc, char *argv[]){    QCoreApplication a(argc, argv);    Target * myTest = new Adapter;    myTest->request();    return a.exec();}

對象方式的代碼大致如下

#include <QtCore/QCoreApplication>#include <iostream>using namespace std;class Target{public:    Target(){}    virtual void request() = 0; /// >子類繼承後實現相應的操作};class Adaptee{public:    Adaptee(){}    void SpecificRequest()    {        cout << " 我是特殊的介面,完成一個一般其他介面完成的不好的功能";    }};class Adapter : public Target {public:    Adapter(Adaptee* adaptee){ m_special = adaptee}    virtual void request()    {        m_special->SpecificRequest(); /// >我調用特殊對象的功能,因為我繼承了    }private:    Adaptee * m_special;};int main(int argc, char *argv[]){    QCoreApplication a(argc, argv);    Target * myTest = new Adapter;    myTest->request();    return a.exec();}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.