设计模式之桥接模式(C++源码) --共同学习

hisense2423 2008-02-27 12:56:20
/***************************************************

桥接模式(bridge):将抽象部分与它的实现部分分离,使
它们都可以独立地变化。

***************************************************/

#include <iostream>

using namespace std;

class Implementor
{
public:
virtual void operation() = 0;
};

class ConcreteImplementorA:public Implementor
{
public:
void operation()
{
cout<<"This is ImplementA"<<endl;
}
};

class ConcreteImplementorB:public Implementor
{
public:
void operation()
{
cout<<"This is ImplementB"<<endl;
}
};

class ConcreteImplementorC:public Implementor
{
public:
void operation()
{
cout<<"This is ImplementC"<<endl;
}
};

class Abstraction
{
protected:
Implementor *pImp;

public:
void SetImplementor(Implementor *p)
{
pImp = p;
}

virtual void operation()
{
if(pImp)
pImp->operation();
}
};

class RefinedAbstraction:public Abstraction
{
public:
void operation()
{
if(pImp)
pImp->operation();
}
};

int main()
{
RefinedAbstraction* pR = new RefinedAbstraction();
Implementor *pI;

pI = new ConcreteImplementorA();
pR->SetImplementor(pI);
pR->operation();
delete pI;

pI = new ConcreteImplementorB();
pR->SetImplementor(pI);
pR->operation();
delete pI;

pI = new ConcreteImplementorC();
pR->SetImplementor(pI);
pR->operation();
delete pI;

delete pR;

return 1;
}

使用MinGW编译通过,输出结果:

This is ImplementA
This is ImplementB
This is ImplementC


Terminated with return code 1
Press any key to continue ...



...全文
407 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lychopper 2008-03-10
  • 打赏
  • 举报
回复
写一个java方向的那
baihacker 2008-02-27
  • 打赏
  • 举报
回复
mark,学习啦
ryfdizuo 2008-02-27
  • 打赏
  • 举报
回复
@_@
ryfdizuo 2008-02-27
  • 打赏
  • 举报
回复

pimple模式:
//#include "pimpl_sample.h"
struct impl;
class pimpl_sample
{
public:
pimpl_sample();
~pimpl_sample();
void do_something();
private:
impl* pimpl_;
};

//.cpp
#include "pimpl_sample.h"
#include <string>
#include <iostream>
using namespace std;

struct impl
{
void do_something_()
{
std::cout<<s_<<endl;
}
std::string s_;
};

pimpl_sample::pimpl_sample()
: pimpl_(new impl)
{
pimpl_->s_ = "THIS is the impl idiom";
}

pimpl_sample::~pimpl_sample()
{
delete pimpl_;
}

void pimpl_sample::do_something()
{
pimpl_->do_something_();
}

int main()
{
pimpl_sample* Test=new pimpl_sample;
Test->do_something();
delete Test;

return 0;
}
感觉和lz说的差不多一个意思;
iambic 2008-02-27
  • 打赏
  • 举报
回复
你为什么要return 1?
michney 2008-02-27
  • 打赏
  • 举报
回复
up

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧