0. 回顾代理模式
代理模式。它在不改变原始类(或者叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能。代理模式在平时的开发经常被用到,常用在业务系统中开发一些非功能性需求,比如:监控、统计、鉴权、限流、事务、幂等、日志。
1. 桥接模式(Bridge Design Pattern)
1.1 定义
1)GoF 的《设计模式》
桥接模式是这么定义的:“Decouple an abstraction from its implementation so that the two can vary independently。”翻译成中文就是:“将抽象和实现解耦,让它们可以独立变化。”
2)另一种通俗理解:
“一个类存在两个(或多个)独立变化的维度,我们通过组合的方式 ,让这两个(或多个)维度可以独立进行扩展。” 通过组合关系来替代继承关系 ,避免继承层次的指数级爆炸。 这种理解方式非常类似于,我“组合优于继承”设计原则。
> Think of composition as a has a relationship. A car "has an" engine, a person "has a" name, etc.
> Think of inheritance as an is a relationship. A car "is a" vehicle, a person "is a" mammal, etc.
上面两句话尽管没讲为什么组合更优秀,可是对于两者的差别却一针见血的说出来了。简单翻译一下,组合适用于,存在关系的类,就是说 Class B 仅仅须要 Class A 的某一个功能。继承则是属于关系,就是 B extends A 的话。那么 B is A。属于关系。
1.2 桥接模式 和 策略模式 区别
桥接模式比策略模式更复杂,更具可塑性,可以说桥接模式中包含策略模式。
- 桥接模式注重的是将两个类的职责隔离开来,并任意组合;
- 策略模式的目的是将不同的算法封装起来便于运行时任意替换。
- 因此可以想象成,桥接组合的实现几乎不会在运行时更改,而策略模式的算法很有可能在运行时替换。