设计模式

来源:互联网 发布:中国作家协会网络作家 编辑:程序博客网 时间:2024/05/22 06:38

一、定义

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

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

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

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

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

二、基本角色

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

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

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

三、通俗例子

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

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

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

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

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

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

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

四、简单例子

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

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

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

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

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

五、总结

1.      优点

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

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

2.      适用场景

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

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

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

 

原创粉丝点击