[GoF设计模式]Bridge模式和Template模式的C++实现
来源:互联网 发布:vb.net高级开发指南 编辑:程序博客网 时间:2024/05/23 10:50
【Bridge模式】
使用组合的方式将功能的需求的抽象和实现解耦,这样一来抽象和实现可以分别独自的变化。由此解决需求变更可能带来的麻烦,即类的迅速膨胀,如一般的情况下抽象和实现可能需要M*N个类来解决问题,而使用Bridge模式则只需要M+N个类来解决问题。此处的“实现”是指“怎么实现用户的需求”,并且通过组合的方式来实现。此处的实现不是指继承基类,实现基类接口,而是通过组合实现用户的需求。Bridge模式是设计模式中复杂求难理解的模式之一。
【图解】
以中国人吃饭用筷子,美国人吃饭用叉子,当然中国人也可以用叉子吃饭,美国人也可以用筷子吃饭 为例,当然这种情况下用和不用都是定义4个类来实现的,但是当增加到三种情况下时候,运用Bridge模式只定义3+3=6个类,而不用则需要3*3需要9个类。如在加上印度人吃饭用手。简单起见,只列两个。
【程序】
【输出】
【Template模式】
对于某一业务逻辑存在不同的细节实现,但总体逻辑框架是相同的。Template模式用于解决这样的问题,strategy模式和他解决的问题类似,但前者是采用集成的方式,封装的是框架,二后者采用的组合的方式,封装的算法。在Template模式中,在模板类(抽象类)的中将原子操作声明为Protected保护类型,而仅提供算法框架的函数供外界调用。
值得说明的是Template模式采用的集成方式是一种反向依赖(DIP,Dependency Inversion Principles)的方式,即父类调用了子类的接口实现(基类调用了派生类的操作)。Template模式的不足是在于其原子操作在各派生类中的细节实现不能被复用,这个问题也是继承自同一个基类说共有的问题。Strategy模式侧重在组合上,将算法封装到一个类中(如:AddOperation),并采用组合的方式解决(实现MathOperation类)。
【图解】
这个例子只做示例用,没写太具体。比如“字符串的模式匹配算法”中有KMP算法,也有前端时间知道的BM算法,这两个算法大体上满足一种逻辑框架,既用模板字符串匹配样本字符串的过程中, 首先匹配样本字符串中的字符串片段,如果没匹配成功,这由连续匹配的字符数,以及当前起始匹配的位置以及模板字符串的长度,计算出在样本字符串中的下一跳批配开始的位置,直到匹配成功。而BM算法是从模板字符串的后面向前面开始比,二KMP则是从前往后。BM和KMP算法在计算下一条位置的实现上也有所不同。以下只是Template模式的示范,并不涉及字符串模式匹配算法的具体实现。
【程序】
【输出】
- [GoF设计模式]Bridge模式和Template模式的C++实现
- 笔记:Gof设计模式--Bridge
- GOF-设计模式之BRIDGE(桥接)
- GoF的设计模式
- 笔记:Gof设计模式--Template Method
- 常见设计模式的解析和实现(C++)之七-Bridge模式
- 常见设计模式的解析和实现(C++)之七-Bridge模式
- 常见设计模式的解析和实现(C++)之七-Bridge模式
- 常见设计模式的解析和实现(C++)之七-Bridge模式
- 设计模式的解析和实现(C++)之七-Bridge模式
- Bridge桥接模式 - GoF设计模式(一)
- [GoF设计模式]Proxy模式和Strategy模式的C++实现
- [Gof设计模式]简单工厂模式和工厂模式的C++实现
- [GoF设计模式]抽象工厂模式和Command模式的C++实现
- [GoF设计模式]Builder模式和Facade模式的C++实现
- [GoF设计模式]Decorator模式和Observer模式的C++实现
- [GoF设计模式]Adapter模式和Chain Of Responsibility模式的C++实现
- [GoF设计模式]Composite模式和Visitor模式的C++实现
- C#正则表达式整理备忘
- 开始找工作了
- Win32 SEH异常深度探索_5 一个异常帧链表遍历例子
- 纯CSS Lightbox效果
- 分享Cisco 642-591题库
- [GoF设计模式]Bridge模式和Template模式的C++实现
- Win32 SEH异常深度探索_6 回退
- Win32 SEH异常深度探索_7 对未处理异常的默认处理
- 关于Swing JTable的getColumnClass
- HP 和 Compaq 台式电脑 - 在 Windows Vista 中执行 HP 系统恢复(Flash 动画演示)
- TCPDUMP中文手册最详细的手册
- 实现打印的几种方式
- Win32 SEH异常深度探索_8 异常处理是如何开始的
- 一个简单的MenuStrip的自定义Renderer