桥连接模式

个人理解:

      抽象类持有接口类的引用。

       如果是2个维度的话,抽象类就持有一个接口类的引用,如果是多个维度的话,就持有多个接口类的引用。桥连接模式利于扩展,减少子类的个数。当多个维度变化的时候,使代码保持简洁。

      举例:人是个抽象类,分男人和女人;当人想用交通工具的时候,就让人持有一个接口类:交通工具。交通工具又有它自己的实现类:自行车、汽车、火车、飞机。人想坐哪种交通工具的时候,通过接口“交通工具”去实现即可。如果想增加一个功能,比如人要买房子,那再让人持有一个接口类:房子。房子又有它自己的实现类:宿舍、住宅、别墅,四合院等。人想住买哪种,让人通过持有的接口类去调用具体的实现即可。如果有一人,存丰第三种人,太监,那么让太监去继承人这个抽象类,那么太监就可以很容易的可以坐车、买房子。而代码更改的却很少。

      抽象的说:桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要

结构型模式 - 桥连接模式

      Sometimes an abstraction should have different implementations; consider an object that handles persistence of objects over different platforms using either relational databases or file system structures (files and folders). A simple implementation might choose to extend the object itself to implement the functionality for both file system and RDBMS. However this implementation would create a problem; Inheritance binds an implementation to the abstraction and thus it would be difficult to modify, extend, and reuse abstraction and implementation independently.

概述:

在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。
意图:
   将抽象部分与实现部分分离,使它们都可以独立的变化。[The intent of this pattern is to decouple abstraction from implementation so that the two can vary independently.]

                                                                    ——《设计模式》GOF

Bridge模式的应用场景

面向对象的程序设计(OOP)里有类继承(子类继承父类)的概念,如果一个类或接口有多个具体实现子类,如果这些子类具有以下特性:
- 存在相对并列的子类属性。
- 存在概念上的交叉。
- 可变性。
我们就可以用Bridge模式来对其进行抽象与具体,对相关类进行重构。

The bridge pattern applies when there is a need to avoid permanent binding between an abstraction and an implementation and when the abstraction and implementation need to vary independently. Using the bridge pattern would leave the client code unchanged with no need to recompile the code.


结构图:

结构图实例:

桥接模式的优缺点

1、分离抽象和实现部分

桥接模式分离了抽象部分和实现部分,从而极大地提高了系统的灵活性。让抽象部分和实现部分独立开来,分别定义接口,这有助于对系统进行分层,从而产生更好的结构化的系统。对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了。

2、更好的扩展性

由于桥接模式把抽象部分和实现部分分离开了,而且分别定义接口,这就使得抽象部分和实现部分可以分别独立地扩展,而不会相互影响,从而大大地提高了系统的可扩展性。

3、可动态地切换实现

由于桥接模式把抽象部分和实现部分分离开了,所以在实现桥接的时候,就可以实现动态的选择和使用具体的实现。也就是说一个实现不再是固定的绑定在一个抽象接口上了,可以实现运行期间动态地切换。

4、可减少子类的个数

根据前面的讲述,对于有两个变化纬度的情况,如果采用继承的实现方式,大约需要两个纬度上的可变化数量的乘积个子类;而采用桥接模式来实现,大约需要两个纬度上的可变化数量的和个子类。可以明显地减少子类的个数。


桥连接模式的应用实例

jdbc-odbc桥连接


在下面的连接内有代码(其实读UML图要比代码还要一目了然)


转自:

http://www.oodesign.com/bridge-pattern.html

http://blog.csdn.net/jason0539/article/details/22568865

http://blog.csdn.net/aaaaaaaa0705/article/details/6284292

http://www.cnblogs.com/draem0507/p/3794530.html


转载请注明:http://blog.csdn.net/paincupid/article/details/43538887

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值