和装饰器模式类似,不同点在于装饰器模式是用于追加功能的,桥模式是从现有的库中调用方法,库是独立于实现化角色的,因此后者不用继承自前者。核心还是传递指针,然后调用方法。
比如从几个不同平台的库中任意调用及组合方法,参考下例
class Implement
{
public:
virtual void func_1() = 0;
virtual void func_2() = 0;
~Implement(){}
};
class Implement_1 :public Implement
{
public:
void func_1() {
cout << "Implement_1::func1" << endl;
}
void func_2() {
cout << "Implement_1::func_2" << endl;
}
};
class Implement_2 :public Implement
{
public:
void func_1() {
cout << "Implement_2::func1" << endl;
}
void func_2() {
cout << "Implement_2::func_2" << endl;
}
};
class composition
{
protected:
Implement* _Implement;
public:
composition(Implement* Implement):_Implement(Implement){}
virtual ~composition(){}
virtual void operation() = 0;
};
class composition_1:public composition
{
public:
composition_1(Implement* Implement) :composition(Implement) {}
virtual void operation() {
composition::_Implement->func_1();
composition::_Implement->func_2();
}
};
class composition_2 :public composition
{
public:
composition_2(Implement* Implement) :composition(Implement) {}
virtual void operation() {
composition::_Implement->func_2();
composition::_Implement->func_1();
}
};
void test03() {
Implement* imp1 = new Implement_1;
Implement* imp2 = new Implement_2;
composition* com1 = new composition_1(imp1);
composition* com2 = new composition_2(imp1);
com1->operation();
com2->operation();
composition* com3 = new composition_1(imp2);
composition* com4 = new composition_2(imp2);
com3->operation();
com4->operation();
delete imp1;
delete imp2;
delete com1;
delete com2;
delete com3;
delete com4;
}