首先我们需要了什么的结构型模式,其实结构型模式就是涉及到类或者对象之间的组合关系。
1.桥接模式
主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活
1.1定义
将抽象部分和实现部分分离,使它们都可以独立第进行变化
1.2 UML
- Abstraction:抽象部分,需要保存一个实现部分的引用
- RefinedAbstraction:优化的抽象部分,抽象部分的具体实现,方法的完善和扩展。
- Implementor:实现部分,可以是接口也可以是抽象类
- ConcteteImplementor:具体的实现部分
1.3 使用场景
一个类存在两个维度,而且每个维度都可以扩展。
比如不同的厂商生产的电脑和显示器的尺寸就是两个维度。
1.4代码实现
A.实现部分
B.抽象部分
C.调用部分
如果需要扩展,如果是实现部分扩展只要在实现部分扩展一个具体的实现类。在调用的时候出入到抽象部分就可以了。
1.4 android源码中的实现
2.外观模式
2.1定义
要求一个子系统的外部与其内部的通讯必须通过一个统一的对象进行。外观模式提供一个高层次的接口,使得子系统更易于使用。
2.2 UML
Facade:系统对外的统一接口,系统内部系统地工作
SystemA:子系统接口
2.3 使用场景
- 为一个复杂子系统提供一个简单接口
- 当你需要构建以个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点
当我们在开发SDK的时候经常用到这种模式。
2.4 代码实现
A 子系统
B.统一对外接口
2.5 android源码中实现
ContextWrapper以供用户访问,该类只能是一个对外的封装类,其内部是调用ContextImpl对象实现的。这就和外观模式UML是一致的。
2.6优缺点
优点
- 1.对客户隐藏了子系统的细节
- 2.外观类对子系统的接口封装,系统更容易使用
缺点
- 1.外观类接口膨胀
- 2.外观类没有遵循开闭原则,当业务出现更改时,可能需要更改外观类。