設計模式之 adapt

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

作用:
將一個類的接口轉換成客戶希望的另外一個接口。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;
}
轉載自:http://www.cppblog.com/converse/archive/2006/07/23/10373.html
本文提到的適配模式有兩種。一是:類的適配器模式是一種靜態的結構模式,採用多重繼承來實現接口的重用。二是:對象的適配器使用對象的合成關係,採用聚合的方式,將希望被適配的類,以指針的方式聚合到目標類中,注意不是修改以前的目標類,而是產生一個子類,在和被適配的類聚合。總的來說,對象的適配器的實現方法更爲靈活,建議使用。
發佈了11 篇原創文章 · 獲贊 0 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章