开发设计模式设计模式之Bridge模式
Hoshea Zhang桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化。
在C++中,可以使用类继承和接口实现来实现桥接模式。以下是一个简单的示例:
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
| 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 { public: Abstraction(Implementor* impl) : impl_(impl) {}
virtual void operation() = 0;
protected: Implementor* impl_; };
class RefinedAbstraction : public Abstraction { public: RefinedAbstraction(Implementor* impl) : Abstraction(impl) {}
void operation() override { impl_->operationImpl(); } };
int main() { Implementor* implA = new ConcreteImplementorA(); Implementor* implB = new ConcreteImplementorB();
Abstraction* abs1 = new RefinedAbstraction(implA); Abstraction* abs2 = new RefinedAbstraction(implB);
abs1->operation(); abs2->operation();
return 0; }
|
在上面的示例中,Implementor
是实现部分的接口,它定义了实现部分的方法。ConcreteImplementorA
和ConcreteImplementorB
是具体的实现类,它们实现了Implementor
接口中的方法。
Abstraction
是抽象部分的类,它包含一个指向Implementor
接口的指针。RefinedAbstraction
是扩展抽象部分的类,它继承了Abstraction
类,并实现了operation()
方法,该方法调用了Implementor
接口中的方法。
在main()
函数中,我们创建了两个Implementor
对象,分别是ConcreteImplementorA
和ConcreteImplementorB
。然后,我们创建了两个RefinedAbstraction
对象,分别使用ConcreteImplementorA
和ConcreteImplementorB
作为参数。最后,我们调用了operation()
方法,该方法实际上调用了Implementor
接口中的方法。由于RefinedAbstraction
类包含了一个指向Implementor
接口的指针,因此它可以与任何实现了Implementor
接口的类一起工作。