那谁的技术博客

感兴趣领域:高性能服务器编程,存储,算法,Linux内核
随笔 - 210, 文章 - 0, 评论 - 1183, 引用 - 0
数据加载中……

常见设计模式的解析和实现(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;
}

posted on 2006-07-23 20:24 那谁 阅读(2668) 评论(2)  编辑 收藏 引用 所属分类: 设计模式

评论

# re: 常见设计模式的解析和实现(C++)之六-Adapt模式   回复  更多评论   

有无class adapter(inheritance)的实现例子? 有点不明白各自的优劣~
2007-03-30 19:50 | init

# re: 常见设计模式的解析和实现(C++)之六-Adapt模式 [未登录]  回复  更多评论   

类的适配器模式是一种静态的结构模式,而且使用多重继承连接到Adapter类;对象的适配器使用对象的合成关系,在被适配的类至目标类的接口匹配中使用委派关系连接到Adapter类。
这两种方法使用情景和参与者几乎一样,对象的适配器的实现方法更为灵活,建议使用。
2008-06-06 13:51 | 张树坤

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理