您的位置:首页 > 编程语言 > C语言/C++

桥接模式C++实现

2014-01-01 20:41 274 查看
最近自学了设计模式,发现好多书的java实现的。因为本人是从事C++开发的,因此想尝试用C++自己实现一遍,加深理解。

桥接模式

定义:

将抽象部分与它的实现部分分离,使它们都可以独立变化

适用性:

1、 不希望在抽象和它的实现部分之间有一个固定的绑定关系。

2、 类的抽象以及它的实现都应该可以通过生产子类的方法加以扩充。

3、 对抽象的实现部分的修改应对客户不产生影响

4、 想对客户隐藏抽象的实现部分

5、 想在多个对象间共享实现,同时客户并不知道

结构类图:



Abstraction:

定义抽象类接口并且维护一个指向Implementor的指针

RefinedAbstraction:

扩充Abstraction定义的接口

Implementor:

定义实现类的接口

ConcreteImplementorA ConcreteImplementorB

实现Implementor的接口

优点:
1、 分离接口以及其实现部分

2、 提供可扩充性

3、 实现细节对客户透明

实现:

class Implementor
{
public:
Implementor(){}

virtual
void doSomething() = 0;
};
//具体实现类A
classConcreteImplementorA:public Implementor
{
public:
ConcreteImplementorA(){}

voiddoSomething()
{
cout<<"ConcreteImplementorA doSomething"<<endl;
}
};

//具体实现类B
classConcreteImplementorB:public Implementor
{
public:
ConcreteImplementorB(){}

voiddoSomething()
{
cout<<"ConcreteImplementorB doSomething"<<endl;
}
};
//抽象接口部分
class Abstraction
{
public:
Abstraction(Implementor*pimp):m_pImp(pimp)
{}
//仅仅调用实现部分
virtual
void Request()
{
m_pImp->doSomething();
}

private:
Implementor *m_pImp;
};

class RefinedAbstraction:public Abstraction
{
public:
RefinedAbstraction(Implementor*pimp):Abstraction(pimp)
{}
//扩充Request接口功能
void
Request()
{
cout<<"RefinedAbstraction Request"<<endl;
Abstraction::Request();
}
};
//可以实现接口部分和实现部分的组合

Implementor*pimpa = new ConcreteImplementorA;
Implementor *pimpb = new ConcreteImplementorB;
Abstraction *pa = new RefinedAbstraction(pimpa);
Abstraction *pb = new RefinedAbstraction(pimpb);
pa->Request();
pb->Request();

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: