设计模式 - 桥接模式

一、定义

1.      桥接模式(Bridge Pattern)是GoF提出的23种设计模式中的一种,属于结构模式。

2.      桥接模式实现了抽象化与实现化的脱耦,他们两个互相独立,不会影响到对方。

3.      桥接模式是使相同模式的两种事物连接起来,并允许各自独立变化。

4.      将依赖具体实现修改为依赖抽象。

5.      抽象类和实现类之间使用组合/聚合而不是继承关系。

二、基本角色

1.      抽象化角色:用于进行连接的发起方。

2.      实现化角色:用于进行连接的接收方。

桥接模式的基本关系如下图。

三、通俗例子

1.      我们日常使用的空调和万能遥控器就是一个桥接模式的例子。

2.      早期的空调和原产遥控器是一种强耦合的关系,一个品牌某型号的空调和原产遥控器是一一对应的,也就是说,一个原产遥控器只能作用于其对应品牌型号的空调,对其它空调是无效的。当家里安装了多台不同品牌型号的空调时,各个原产遥控器就无法混用了。而且原产遥控器和其空调的强耦合关系,使其不能独立变化,每次变化都会影响对方。

3.      为了解决这个麻烦,出现了万能空调遥控器。你现在可以用任意品牌的万能遥控器操作任意一台空调了。

4.      这里的万能遥控器就是一个抽象化角色,空调就是实现化角色,实现了脱耦

万能遥控器可以独立变化,增加任意的按钮,而不会影响到空调(不支持的功能就没作用)。

空调也可以独立变化,增加任意的功能,而不会影响到遥控器(某个遥控器无法使用该空调的某个功能)。

具体的某个万能遥控器和空调之间,可以任意组合

四、简单例子

1.      根据桥接模式所要求的基本角色,我们可以建立一个最简单的例子,如下图所示的JAVA类

2.      桥接的方向是抽象化角色->实现化角色,在这个例子里就是:形状->颜色。

所有这里定义的形状抽象类,持有颜色抽象类,并主动调用颜色方法。

3.      而定义的颜色抽象类,则被动接收形状。

4.      使用:现在再进行任意组合,就比较清晰了。

五、总结

1.      优点

降低了沿着两个或多个维度扩展时的复杂度,防止类的过度膨胀。

解除了两个或多个维度之间的耦合,使它们沿着各自方向变化而不互相影响

2.      适用场景

当一个对象有多个变化因素时,可以考虑使用桥接模式,通过抽象这些变化因素,将依赖具体实现修改为依赖抽象。

当我们期望一个对象的多个变化因素可以动态变化,而且不影响客户端的程序使用时。

如果使用继承的实现方案,会导致产生很多子类,任何一个变化因素都需要产生多个类来完成,就要考虑桥接模式。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值