桥接模式
1.何为桥接模式
桥接模式通常作为连接器或粘合剂,将两个“不相关的组件“连接起来。抽象的使用允许组件之间在不了解具体实现的情况下彼此交换(使用多态)。将抽象部分(业务功能)和实现部分(平台实现)分离,使它们可以独自变化
2.桥接模式的意义和使用场景
有些类由于其实现逻辑,会有两个乃至多个维度的变化。这会导致类的数量急剧膨胀,耦合增强。如有n个业务类,m个平台实现类,那么就需要n*m个子类来实现这两个类的功能。桥接模式使用“对象间的组合关系”解耦了抽象和实现间的耦合。
3.桥接模式的实现
在业务实现类里包含平台实现抽象基类,业务实现类继承自业务抽象基类。用不同平台对象去初始化业务实现对象就可以得到不同功能的实现。于是我们将n*m个功能子类转换成了n+m个子类。同时实现了业务功能和平台实现的独立变化(解耦)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| class Implementor { public: virtual void operationImpl() = 0; };
class ConcreteImplementorA : public Implementor { public: void operationImpl() override { } };
class ConcreteImplementorB : public Implementor { public: void operationImpl() override { } };
class Abstraction { protected: Implementor* implementor;
public: Abstraction(Implementor* impl) : implementor(impl) {}
virtual void operation() = 0; };
class RefinedAbstraction : public Abstraction { public: RefinedAbstraction(Implementor* impl) : Abstraction(impl) {}
void operation() override { implementor->operationImpl(); } };
int main() { Implementor* implementorA = new ConcreteImplementorA(); Abstraction* abstractionA = new RefinedAbstraction(implementorA); abstractionA->operation(); Implementor* implementorB = new ConcreteImplementorB(); Abstraction* abstractionB = new RefinedAbstraction(implementorB); abstractionB->operation(); delete abstractionA; delete implementorA; delete abstractionB; delete implementorB; return 0; }
|