从桥接模式与策略模式谈起
来源:互联网 发布:预算软件多少钱 编辑:程序博客网 时间:2024/06/04 17:42
http://www.blogjava.net/wangle/archive/2007/04/25/113545.html
桥接(Bridge)模式是结构型模式的一种,而策略(strategy)模式则属于行为模式。以下是它们的UML结构图。
在桥接模式中,Abstraction通过聚合的方式引用Implementor。
在策略模式中,Context也使用聚合的方式引用Startegy抽象接口。
从他们的结构图可知,在这两种模式中,都存在一个对象使用聚合的方式引用另一个对象的抽象接口的情况,而且该抽象接口的实现可以有多种并且可以替换。可以说两者在表象上都是调用者与被调用者之间的解耦,以及抽象接口与实现的分离。
那么两者的区别体现在什么地方呢?
1. 首先,在形式上,两者还是有一定区别的,对比两幅结构图,我们可以发现,在桥接模式中不仅Implementor具有变化(ConcreateImplementior),而且Abstraction也可以发生变化(RefinedAbstraction),而且两者的变化是完全独立的,RefinedAbstraction与ConcreateImplementior之间松散耦合,它们仅仅通过Abstraction与Implementor之间的关系联系起来。而在策略模式中,并不考虑Context的变化,只有算法的可替代性。
2. 其次在语意上,桥接模式强调Implementor接口仅提供基本操作,而Abstraction则基于这些基本操作定义更高层次的操作。而策略模式强调Strategy抽象接口的提供的是一种算法,一般是无状态、无数据的,而Context则简单调用这些算法完成其操作。
3. 桥接模式中不仅定义Implementor的接口而且定义Abstraction的接口,Abstraction的接口不仅仅是为了与Implementor通信而存在的,这也反映了结构型模式的特点:通过继承、聚合的方式组合类和对象以形成更大的结构。在策略模式中,Startegy和Context的接口都是两者之间的协作接口,并不涉及到其它的功能接口,所以它是行为模式的一种。行为模式的主要特点就是处理的是对象之间的通信方式,往往是通过引入中介者对象将通信双方解耦,在这里实际上就是将Context与实际的算法提供者解耦。
所以相对策略模式,桥接模式要表达的内容要更多,结构也更加复杂。桥接模式表达的主要意义其实是接口隔离的原则,即把本质上并不内聚的两种体系区别开来,使得它们可以松散的组合,而策略在解耦上还仅仅是某一个算法的层次,没有到体系这一层次。从结构图中可以看到,策略的结构是包容在桥接结构中的,桥接中必然存在着策略模式,Abstraction与Implementor之间就可以认为是策略模式,但是桥接模式一般Implementor将提供一系列的成体系的操作,而且Implementor是具有状态和数据的静态结构。而且桥接模式Abstraction也可以独立变化。
参考:吕震宇的设计模式随笔——蜡笔与毛笔的故事
Bridge Strategy 和State的区别 后续的讨论,很有启发。
- 从桥接模式与策略模式谈起
- 从桥接模式与策略模式谈起
- 从抽象谈起(一):工厂模式与策略模式
- 从抽象谈起(二):观察者模式与回调
- 从抽象谈起(二):观察者模式与回调
- 从招式与内功谈起——设计模式概述
- 设计模式 - - - 从单例模式谈起
- 桥接模式与策略模式
- 策略模式与桥接模式
- 桥接模式与策略模式区别
- 单例模式---从职员层次谈起
- 设计模式概述 从招式与内功谈起——设计模式概述(二):设计模式是什么?
- 为什么使用设计模式——从Singleton模式谈起
- 桥接模式与策略者模式分析
- 从招式与内功谈起——设计模式概述(一)
- 从招式与内功谈起——设计模式概述(二)
- 从招式与内功谈起——设计模式概述(三)
- 从招式与内功谈起——设计模式概述(一)
- ti packages for omap
- TQ2440 u-boot-2012.10移植二支持NAND启动
- 内存不足 java.lang.OutOfMemoryError: Java heap space
- IOS开发~UISCrollView与UITableView嵌套使用终极解决方案
- jxl生成Excel和读取Excel
- 从桥接模式与策略模式谈起
- Git和Repo扫盲——如何取得Android源代码
- 源码解析IntentService的好处
- TQ2440 u-boot-2012.04.01移植一串口正常输出
- cisco fpm技术
- spring实例应用(IoC)
- uva 10719 Quotient Polynomial
- Android 中的WiFi学习笔记——经典
- seo优化生成批量内页获取长尾词排名