Android设计模式——桥接模式(七大结构型)
1.桥接模式介绍
桥接模式(Bridge Pattern)也称为桥梁模式,是七大结构型设计模式之一。
2.桥接模式的定义
将抽象部分与实现部分分离,使它们可以独立地进行变化。
3.使用场景
1.任何多维变化类或者说多个树状类之间的耦合都可以使用桥接模式来实现解耦。
2.如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系,可以使用桥接模式使它们在抽象层建立一个关联关系。
3.对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,也可以考虑使用桥接模式。
4.一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。
4.UML类图
5.角色介绍
1.Abstraction:抽象部分
该类保持有一个对实现部分对象的引用,抽象部分中的方法需要调用实现部分的对象来实现,该类一般为抽象类。
2.RefinedAbstraction:优化的抽象部分。
3.Implementor:实现部分
可以为接口或抽象类,其方法不一定要与抽象部分中的一致,一般情况下是由实现部分提供基本的操作,而抽象部分定义的则是基于实现部分这些基本操作的业务方法。
4.ConcreteImplementorA/ConcreteImplementorB实现部分的具体实现。
完善实现部分中方法定义的具体逻辑。
6.模板
实现部分(上图) 实现部分的具体实现A(上图) 实现部分的具体实现B(上图) 抽象部分(上图) 抽象部分的子类(上图)7.例子
实现部分的抽象(上图) 实现部分的具体实现--原味奶茶(上图) 实现部分的具体实现--加糖奶茶(上图) 抽象部分--保持对实现部分对象的引用,抽象部分中的方法需要调用实现部分的对象来实现(上图) 抽象部分的子类--大杯奶茶(上图) 抽象部分的子类--小杯奶茶(上图) 客户端调用(上图)例子分析
为了增加奶茶的甜味种类,我们可以让MilkTeaAdditives类变化起来,增加更多的子类,比如少糖,多糖等等。不管是MilkTea变化了还是MilkTeaAdditives变化了,其相对于对方而言都是独立的没有过多的交集,两者之间唯一的联系就是MilkTea中保持的对MilkTeaAdditives的引用,这是两者之间的纽带,这就是桥接模式
8.Android源码中的桥接模式
桥接模式在Android应用中应用相当广泛,比如在View的视图层级中,Button,TextView和View之间构成一个继承关系的视图层级,每一层视图都仅仅是对一种类型控件的描述,其定义了该类控件所拥有的基本属性和行为,但是将他们真正会知道屏幕的部分是由与View相关的功能实现类DisplayList HardwareLayer和Canvas负责。这两部分之间的关系可以看作是对桥接模式的应用。
进行数据库dao类设计有时也需要使用到桥接模式。
Android 应用层和Native层之间的交互也是一个好例子。
9.总结
桥接模式优点很明显:分离抽象与实现,灵活的扩展以及对客户来说透明的实现。
桥接模式缺点就是抽象和实现的分离不好把握,不容易设计。