结构型模式 桥接模式
Client
Bridge模式的使用者
Abstraction
抽象类接口(接口或抽象类)维护对行为实现(Implementor)的引用
Refined Abstraction
Abstraction子类
Implementor
行为实现类接口 (Abstraction接口定义了基于Implementor接口的更高层次的操作)
ConcreteImplementor
Implementor子类
适用于:
桥接模式(Bridge Pattern)是将抽象部分与实际部分分离(解耦合),使它们都可以独立的变化。
/** * 结构型模式 桥接模式 * Bridge 模式又叫做桥接模式,是构造型的设计模式之一。 * Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。 * 它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。不太常用的一种设计模式。 * */ #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> class Engine { public: // 引擎安装 virtual void installEngine() = 0; virtual ~Engine() {} }; class Engine4000: public Engine { public: virtual void installEngine() override { std::cout << "引擎安装 Engine4000" << std::endl; } }; class Engine3500: public Engine { public: virtual void installEngine() override { std::cout << "引擎安装 Engine3500" << std::endl; } }; class Car { public: Car(Engine *pEngine) { m_engine = pEngine; } // 车安装引擎 virtual void installEngine() = 0; protected: Engine *m_engine; // 此变量是保护属性,不是私有属性 }; class BMW7: public Car { public: BMW7(Engine *pEngine): Car(pEngine) // 调用父类的构造函数 { } // 注意: 车安装引擎 和 引擎安装 的不同之处 virtual void installEngine() override // 车安装引擎 { std::cout << "BMW7" << std::endl; // 使用父类的 保护变量(m_engine) 类型(Engine *) m_engine->installEngine(); // 引擎安装 } }; void mytest() { Engine4000 *e4000 = new Engine4000(); BMW7 *bmw7 = new BMW7(e4000); bmw7->installEngine(); delete bmw7; bmw7 = nullptr; delete e4000; e4000 = nullptr; return; } int main() { mytest(); system("pause"); return 0; }