程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 設計模式的解析和實現(C++)之六-Adapt模式

設計模式的解析和實現(C++)之六-Adapt模式

編輯:關於C++

作用:

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

UML示意圖

1)采用繼承原有接口類的方式

2)采用組合原有接口類的方式

解析:

Adapt模式其實就是把完成同樣的一個功能但是接口不能兼容的類橋接在一起使之可以在一起工作,這個模式使得復用舊的接口成為可能.

實現:

Adapt模式有兩種實現辦法,一種是采用繼承原有接口類的方法,一種是采用組合原有接口類的方法,這裡采用的是第二種實現方法.

1)Adapt.h

/**//********************************************************************
    created:    2006/07/20
    filename:     Adapter.h
    author:        李創
                http://www.cppblog.com/converse/

    purpose:    Adapter模式的演示代碼
*********************************************************************/

#ifndef ADAPTER_H
#define ADAPTER_H

// 需要被Adapt的類
class Target
{
public:
    Target(){}
    virtual ~Target() {}

    virtual void Request() = 0;
};

// 與被Adapt對象提供不兼容接口的類
class Adaptee
{
public:
    Adaptee(){}
    ~Adaptee(){}
    void SpecialRequest();
};

// 進行Adapt的類,采用聚合原有接口類的方式
class Adapter
    : public Target
{
public:
    Adapter(Adaptee* pAdaptee);
    virtual ~Adapter();

    virtual void Request();

private:
    Adaptee* m_pAdptee;
};

#endif

2)Adapt.cpp

/**//********************************************************************
    created:    2006/07/20
    filename:     Adapter.cpp
    author:        李創
                http://www.cppblog.com/converse/

    purpose:    Adapter模式的演示代碼
*********************************************************************/

#include "Adapter.h"
#include <iostream>

void Adaptee::SpecialRequest()
{
    std::cout << "SpecialRequest of Adaptee\n";
}

Adapter::Adapter(Adaptee* pAdaptee)
    : m_pAdptee(pAdaptee)
{

}

Adapter::~Adapter()
{
    delete m_pAdptee;
    m_pAdptee = NULL;
}

void Adapter::Request()
{
    std::cout << "Request of Adapter\n";

    m_pAdptee->SpecialRequest();
}

3)Main.cpp

/**//********************************************************************
    created:    2006/07/20
    filename:     Main.cpp
    author:        李創
                http://www.cppblog.com/converse/

    purpose:    Adapter模式的測試代碼
*********************************************************************/

#include "Adapter.h"
#include <stdlib.h>

int main()
{
    Adaptee *pAdaptee = new Adaptee;
    Target *pTarget = new Adapter(pAdaptee);
    pTarget->Request();

    delete pTarget;

    system("pause");

    return 0;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved