大胖的部落格

Just a note

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks

当需求的接口描述和已经存在的实现不匹配时,可以通过继承和组合两种方法实现adapter模式,从而用已有的实现满足需求。
adapter公有继承需求类,私有继承实现类,重写的接口里调用实现。
adapter共有继承需求类,将实现类作为自己的成员,重写的接口里调用实现。

#include <iostream>

using namespace std;

//需求接口
class Target
{
public:
    
virtual void Request() = 0;
}
;

//已有实现
class Adaptee
{
public:
    
void SpecialRequest() {cout<<"SpecialRequest"<<endl;}
}
;

//继承方式的adapter
class DerivedAdapter: public Target, private Adaptee
{
public:
    
void Request()
    
{
        SpecialRequest();
    }

}
;

//组合方式的adapter
class ComposeAdapter: public Target
{
public:
    ComposeAdapter(Adaptee
* p){pa = p;}
    
~ComposeAdapter(){delete pa;}
    
void Request()
    
{
        pa
->SpecialRequest();
    }

private:
    Adaptee
* pa;
}
;

//客户端代码
void ClientTest(Target* p)
{
    p
->Request();
}


//测试
int main()
{
    Target
* pd = new DerivedAdapter;
    ClientTest(pd);
    delete pd;

    Target
* pc = new ComposeAdapter(new Adaptee);
    ClientTest(pc);
    delete pc;

    
return 0;
}
posted on 2009-06-09 10:37 大胖 阅读(105) 评论(0)  编辑 收藏 引用 所属分类: Design Pattern

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理