设计模式学习笔记之桥接模式
2012-12-13 14:32
225 查看
这个模式在看书时,一直没想到更好的应用场景,由此感慨一下《设计模式之禅》这本书, 通过这本书,的确对各种模式有了个比较清晰的理解,甚至对模式的结构也能很明确。也就是说,知道了是怎么做的。但是也有其本身的缺点,由于里面的例子基本就是demo级别的,没有多大现实意义,所以,对于理论和实际的联系这块做的稍显不足。期待作者以后加强这块。感谢这本书领我入门。
于是我每学一个,都结合李建忠的视频课程来,他那里比较侧重于实际应用环节,当然也不能说他这就是完美的,个人感觉,对怎么做这块,还是前者讲的比较系统。
各有利弊吧。
以上纯属个人之谈。
说说这个桥接模式。
据说它应用的不是太广,学的过程中也有一些体会,只有在很特定的场景下,才可能引入之。
这个特定场景不是很好找啊。即使上面提到的视频课程,也是仅仅给出一个泛泛的例子,看了不仅让人唏嘘。
也说动机:
对于接口的实现,有多个维度的变化。
怎么来理解这句话呢?其实这里面涉及到一个问题,单一职责原则,既然实现一个接口,有这么多的维度,那么也就是说,这个接口所做的事,可能就不是个单一的事了。一个字,需要拆。
视频里的例子是:坦克=>各种型号的坦克=>各种平台上的各种型号的坦克,这是一个地地道道的多层继承。这么用,存在的问题,不言而喻。
一是改变一处,引起的连锁反应难以想象。二是重复代码,继承一次,重复一次。
有更好的办法吗?
其实多继承,可以让多层继承,变为单层。但是这样不灵活。
那么,最合适(注意,这里咱不说最好)的方法,就是引入桥接。
以这个例子来说:
一个层次是定义接口IA,这个接口只关心坦克的型号(T50、T95)。
另一个层也是定义另一个接口IB,这个接口只关心平台(PC、TV、Mobil)。
这两层,搭一个桥,怎么搭?用组合的方式来搭。
也就是在IA中,定义变量,类型为IB。
在IA的实现类中的具体方法中,就可以用IB的实现对象的各种方法,来达到目的。
代码以后再补。
于是我每学一个,都结合李建忠的视频课程来,他那里比较侧重于实际应用环节,当然也不能说他这就是完美的,个人感觉,对怎么做这块,还是前者讲的比较系统。
各有利弊吧。
以上纯属个人之谈。
说说这个桥接模式。
据说它应用的不是太广,学的过程中也有一些体会,只有在很特定的场景下,才可能引入之。
这个特定场景不是很好找啊。即使上面提到的视频课程,也是仅仅给出一个泛泛的例子,看了不仅让人唏嘘。
也说动机:
对于接口的实现,有多个维度的变化。
怎么来理解这句话呢?其实这里面涉及到一个问题,单一职责原则,既然实现一个接口,有这么多的维度,那么也就是说,这个接口所做的事,可能就不是个单一的事了。一个字,需要拆。
视频里的例子是:坦克=>各种型号的坦克=>各种平台上的各种型号的坦克,这是一个地地道道的多层继承。这么用,存在的问题,不言而喻。
一是改变一处,引起的连锁反应难以想象。二是重复代码,继承一次,重复一次。
有更好的办法吗?
其实多继承,可以让多层继承,变为单层。但是这样不灵活。
那么,最合适(注意,这里咱不说最好)的方法,就是引入桥接。
以这个例子来说:
一个层次是定义接口IA,这个接口只关心坦克的型号(T50、T95)。
另一个层也是定义另一个接口IB,这个接口只关心平台(PC、TV、Mobil)。
这两层,搭一个桥,怎么搭?用组合的方式来搭。
也就是在IA中,定义变量,类型为IB。
在IA的实现类中的具体方法中,就可以用IB的实现对象的各种方法,来达到目的。
代码以后再补。
相关文章推荐
- java/android 设计模式学习笔记(8)---桥接模式
- HeadFirst 设计模式学习笔记20--桥接(Bridge)模式拾零
- 设计模式之桥接模式学习笔记
- 设计模式学习笔记-桥接模式
- 设计模式学习笔记(八)——Bridge桥接模式
- 设计模式学习笔记十四:适配器模式、桥接模式与外观模式
- 设计模式学习笔记十四:适配器模式、桥接模式与外观模式
- 设计模式学习笔记之桥接模式
- 设计模式学习笔记之(桥接模式brid…
- C#面向对象设计模式学习笔记(7) - Bridge 桥接模式(结构型模式)
- 设计模式学习笔记-桥接模式
- [设计模式学习笔记]Bridge桥接模式
- 设计模式学习笔记——桥接(Bridge)模式
- 设计模式:桥接模式(学习笔记)
- 设计模式学习笔记--桥接模式
- 设计模式学习笔记(十六:桥接模式)
- (学习笔记)设计模式之桥接模式
- 设计模式学习笔记--桥接模式
- 设计模式学习笔记(四)—Bridge桥接模式
- 设计模式学习笔记——桥接(Bridge)模式