概念理解
-
定义:将抽象部分 (抽象化) 与它的实现部分 (实现化) 分离开来(脱耦),使他们都可以独立变化。桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。
-
如何理解
Bridge.png
抽象化:将共同的性质抽取出去而形成类的过程。关注于共有属性的剥离。例如,Shape的绘制方法
实现化:对抽象化事物的进一步具体化。关注于如何利用实现抽象类需要的功能,例如,绘制一个红色的圆、绿色的矩形、蓝色的三角形等。
脱耦:将它们之间的强关联改换成弱关联,将两个角色之间的继承关系改为关联关系
抽象类:Shape
扩展的抽象类:Circle、Square、Rectangle
实现类的抽象类或者接口:Color
具体的实现类:Red、Green、Blue
应用和优缺点
-
解决问题:
实现系统可能有多个角度分类,每一种角度都可能变化,那么把这种多角度分类给分离出来让他们独立变化,减少他们之间耦合。解决用继承会造成类爆炸问题。 -
实例:
不同的车可以不同的道路下跑。
经典图形和颜色问题,不同的图形可以绘制不同的颜色。
电视机和遥控器 -
使用场景
1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
2、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
3、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。 -
优点
1、分离抽象接口及其实现部分。提高了比继承更好的解决方案。
2、桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。
3、实现细节对客户透明,可以对用户隐藏实现细节。 -
缺点
1、桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
2、桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。
网友评论