桥接模式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();
桥接模式
定义:
将抽象部分与它的实现部分分离,使它们都可以独立变化
适用性:
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();
相关文章推荐
- 设计模式C++实现十八:桥接模式
- C++实现桥接模式
- 设计模式C++实现(10)——桥接模式
- 设计模式---桥接模式(C++实现)
- 设计模式C++实现(10)——桥接模式
- 桥接模式(C++实现)
- 设计模式C++实现(10)——桥接模式
- 设计模式C++实现(10)——桥接模式
- 桥接模式及C++实现 C++设计模式-AbstractFactory抽象工厂模式
- 设计模式C++实现(10)——桥接模式
- 桥接模式及C++实现
- 大话设计模式--桥接模式 Bridge -- C++实现实例
- 设计模式C++实现(5)——桥接模式
- 大话设计模式--桥接模式 Bridge -- C++实现实例
- 设计模式学习(C++实现)6--桥接模式
- 利用桥接模式实现手机品牌和手机软件之间的解耦 C++
- 桥接模式及C++实现
- 桥接模式及C++代码实现
- 设计模式C++实现(10)——桥接模式
- 设计模式C++实现(10)——桥接模式