设计模式——桥梁(桥接)模式
2016-02-22 12:33
260 查看
一、定义
将抽象化(Abstraction)和实现化(Implementation)解耦,使得两者可以独立地变化如何理解?可以从定义中的三个词——“抽象化”、“实现化”、“解耦”来理解。
抽象化:从众多的事务中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如奔驰、宝马、奥迪等,他们共同的特征就是汽车。抽象化的过程,是一个裁剪的过程,舍弃非本质特征
实现化:对抽象化进行具体实现,如从“车--->奔驰”
解耦:所谓的耦合,是指两个实体的行为存在某种强关联。强关联指的是在编译时已经确定的,无法在运行时改变的关联;弱关联指的是可以动态地确定并且可以在运行时期动态地改变的关联。Java中,继承是强关联,聚合是弱关联
桥梁模式就是将两个角色之间的继承关系改为聚合关系,来将强关联换成弱关联。
二、适用场景
重用性要求较高的场景接口或抽象类不稳定的场景
三、注意事项
并非涉及继承就要用桥梁模式,如果发现继承有N层的时候,可以考虑使用四、模式中的角色
Abstraction 抽象化角色Implementor 实现化角色
RefinedAbstraction 修正抽象化角色
ConcreteImplementor 具体实现化角色
用法:抽象角色引用实现角色
五、模式的优点
抽象与实现分离优秀的扩充能力
实现细节对客户透明(抽象层通过聚合关系完成封装)
六、模式的举例应用
例1
设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:方案一:为每一种形状都提供一套各种颜色的版本。
方案二:根据实际需要对形状和颜色进行组合
方案一
方案二(桥接模式的应用)
例2
现需要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说必须准备15个具体的蜡笔类。而如果使用毛笔的话,只需要3种型号的毛笔,外加5个颜料盒,用3+5=8个类就可以实现15支蜡笔的功能。蜡笔和毛笔的关键一个区别就在于笔和颜色是否能够分离
参考
[1] 《设计模式之禅》 秦小波[2] 《设计模式(六)桥连模式Bridge(结构型》 http://blog.csdn.net/hguisu/article/details/7529194
[3] 《JAVA与模式》之桥梁模式》 http://www.cnblogs.com/java-my-life/archive/2012/05/07/2480938.html
相关文章推荐
- volley框架使用
- 事件委托
- collectionview resueview 重影的问题
- PAT--1084 Broken Keyboard
- Palindrome Number
- 在 const 和 non-const 重载的成员函数中避免代码重复
- android graphic(8)—surface申请GraphicBuffer过程
- Ubuntu登陆windows搭建的FTP服务器文件名乱码解决方法
- struts2 ognl
- C++类和对象的应用实例——链表
- java将集合转换为数组(二维数组)
- Wordpress 网站搭建及性能监控方法详解!
- 在Eclipse中创建Maven多模块工程的例子
- 【SPOJ-NAGAY】Joseph’s Problem【余数求和】【分块】
- 匿名内部类
- Unity 4.6.x内存优化纪要
- 分享git的常用命令
- HTML5 webSQL
- nginx源码初读(3)--让烦恼从数据结构开始(ngx_pool)
- ubuntu14.04搭建LAMP环境