桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
什么叫做抽象与它的实现分离,这并不是说,让抽象类与其派生类分离,因为这没有任何意义。实现指的是抽象类和它的派生类用来实现自己的对象[1]。
在《设计模式解析》一书的读书笔记中,对这个模式有更详细的解释。
- class Implementor
- {
- public:
- //提供一个接口即可
- virtual void Operation()=0;
- };
- class ConcreteImplementor : public Implementor
- {
- public:
- virtual void Operation()
- {
- //do something here;
- //具体的实现代码
- }
- };
- class Abstraction
- {
- //声明为protected类型,能够让子类使用这个成员
- protected:
- Implementor* pImpl;
- public:
- void setImplementor(Implementor* aImpl)
- {
- pImpl = aImpl;
- }
- virtual void ImplementOperation()
- {
- pImpl->Operation();
- };
- };
- class RefinedAbstraction : public Abstraction
- {
- public:
- virtual void ImplementOperation()
- {
- pImpl->Operation();
- }
- };
- void main()
- {
- Abstraction* pab = new RefinedAbstraction();
- pab->setImplementor(new ConcreteImplementor());
- pab->ImplementOperation();
- };
实际动手编写以上的代码,才发现自己生疏了不少。(默写的时候出现问题呢)
[1] 看模式的结构图,就一目了然了:所谓的“桥”,在图形上最能体现特色的就是上面的两个抽象类之间的一条连接线:聚合关系(空心菱形加实线箭头)。因为在Abstraction类中,有一个成员是Implementor(Implementor对象的功能在Abstraction类中要调用到)。