C++ Bridge 设计模式

简介:

C++ Bridge 设计模式

 

Bridge模式是应用最广泛也是我个人比较喜欢的一个C++设计模式之一。

Bridge模式意图:降低抽象和实现之间的耦合。

面向对象系统设计和分析中最重要的一点就是:高内聚,低耦合。Bridge模式使得抽象和实现能够相对独立。

 

 

Bridge模式结构图:

 

        

            

 

Bridge模式的关键在于Abstraction的派生类中维护了一个纸箱Implementor类的指针。

让Implentor的派生类来去实现。从而实现了抽象和实现的相对独立。

 

参考代码:

 

#pragma once //Abstraction.h class Abstraction { public: Abstraction(void){}; virtual ~Abstraction(void){}; virtual void Operation() = 0; };

 

 

#pragma once //Implementor.h class Implementor { public: Implementor(void){}; virtual ~Implementor(void){}; virtual void OperationImp() = 0; };

 

 

 

#pragma once //ConcreteImplementorA.h #include "implementor.h" class ConcreteImplementorA : public Implementor { public: ConcreteImplementorA(void); ~ConcreteImplementorA(void); void OperationImp(); };

 

#pragma once //ConcreteImplementorB.h #include "implementor.h" class ConcreteImplementorB : public Implementor { public: ConcreteImplementorB(void); ~ConcreteImplementorB(void); void OperationImp(); };

 

 

#pragma once //RefinedAbstraction.h #include "abstraction.h" #include "Implementor.h" class Implementor; class RefinedAbstraction : public Abstraction { public: RefinedAbstraction(void); RefinedAbstraction(Implementor *imp); ~RefinedAbstraction(void); void Operation(); private: Implementor *m_imp; };

 

#include <iostream> #include "ConcreteImplementorA.h" using namespace std; //ConcreteImplementonA.cpp ConcreteImplementorA::ConcreteImplementorA(void) { } ConcreteImplementorA::~ConcreteImplementorA(void) { } void ConcreteImplementorA::OperationImp() { cout << "Hi, I am in ConcreteImplementorA" << endl; }

 

 

#include <iostream> #include "ConcreteImplementorB.h" using namespace std; //ConcreteImplementorB.cpp ConcreteImplementorB::ConcreteImplementorB(void) { } ConcreteImplementorB::~ConcreteImplementorB(void) { } void ConcreteImplementorB::OperationImp() { cout << "Hi, I am in ConcreteImplementorB" << endl; }

 

 

#include <iostream> #include "RefinedAbstraction.h" using namespace std; //RefinedAbstraction.cpp RefinedAbstraction::RefinedAbstraction(void) { m_imp = NULL; } RefinedAbstraction::~RefinedAbstraction(void) { } RefinedAbstraction::RefinedAbstraction(Implementor *imp) { m_imp = imp; } void RefinedAbstraction::Operation() { m_imp->OperationImp(); }

 

#include "Abstraction.h" #include "ConcreteImplementorA.h" #include "ConcreteImplementorB.h" #include "RefinedAbstraction.h" //main.cpp int main() { ConcreteImplementorA *pImpA = new ConcreteImplementorA; ConcreteImplementorB *pImpB = new ConcreteImplementorB; Abstraction *objA = new RefinedAbstraction(pImpA); Abstraction *objB = new RefinedAbstraction(pImpB); objA->Operation(); objB->Operation(); }

 

 

 

我个人 非常欣赏也非常推崇Bridge模式。

目录
相关文章
|
2月前
|
设计模式 安全 测试技术
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
67 0
|
2月前
|
设计模式 算法 C++
【C++ 泛型编程 进阶篇】C++元模板编程与设计模式的结合应用教程(二)
【C++ 泛型编程 进阶篇】C++元模板编程与设计模式的结合应用教程
30 0
|
19天前
|
设计模式 存储 Java
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
|
2月前
|
设计模式 算法 中间件
【C++ 可调用对象的应用】C++设计模式与现代编程技巧:深入可调用对象的世界
【C++ 可调用对象的应用】C++设计模式与现代编程技巧:深入可调用对象的世界
127 1
|
2月前
|
设计模式 机器学习/深度学习 算法
C++设计模式新篇章:掌握状态委托
C++设计模式新篇章:掌握状态委托
75 0
|
2月前
|
设计模式 算法 C++
从 C++ 优化状态机实现:结合设计模式的实用指南
从 C++ 优化状态机实现:结合设计模式的实用指南
69 1
|
2月前
|
设计模式 存储 安全
C++多线程管理的艺术:从基础到设计模式
C++多线程管理的艺术:从基础到设计模式
67 0
|
2月前
|
设计模式 缓存 编译器
【C/C++ 设计模式应用】精细化职责与灵活性:C++中的发送接口和数据转换基类设计
【C/C++ 设计模式应用】精细化职责与灵活性:C++中的发送接口和数据转换基类设计
68 0
|
2月前
|
设计模式 关系型数据库 数据库
【C++ 设计模式 工厂模式对比】深入探索设计模式:工厂方法与抽象工厂的比较与对照
【C++ 设计模式 工厂模式对比】深入探索设计模式:工厂方法与抽象工厂的比较与对照
22 1
|
2月前
|
设计模式 存储 算法
【C++ 泛型编程 进阶篇】C++元模板编程与设计模式的结合应用教程(三)
【C++ 泛型编程 进阶篇】C++元模板编程与设计模式的结合应用教程
26 0