开发者社区> hyman> 正文

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模式。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
c# 设计模式之单例模式学习
c#的设计模式有很多种,当然也可以说语言的设计模式有很多种(23种),单例模式应该是其中最简单的一种,但是不要因为简单而小看他,否则最后后悔的肯定是你 单例模式包括懒汉模式(还有多线程下的锁定)、恶汉模式 下面写一下饿汉模式的实现原理:  public Class Singleton { ...
1021 0
C++程序设计-第16周 ASCII文件处理
课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 完成题目需要的文件,请下载:http://download.csdn.net/detail/sxhelijian/5566513 【项目1】旧题再做涨工资   从文件salary.txt中读入500名工人的工资,共享改革开放成果工资全翻番,将由低到高排序后的结果在屏幕
1246 0
C#设计模式学习笔记-单例模式
本文转载:http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html最近在学设计模式,学到创建型模式的时候,碰到单例模式(或叫单件模式),现在整理一下笔记。
893 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
18712 0
+关注
88
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载