将抽象和实现解耦,让它们可以独立变化。这里所说的“抽象”不是某个具体的抽象类或者接口,而是一类抽象类、接口或者说由多个抽象类、接口组成的这个“抽象”。而这里说的“实现”也是对“抽象”中的抽象类、接口的具体实现。
引用别人的一段话
- 桥接看着就像是面向接口编程这一原则的原旨—将实现与抽象分离。让我迷惑的是,让两者独立变化的说法,接口不是应该稳定吗,为什么要变化?
- 多个纬度独立变化那个解释倒是比较容易理解。文中举的警报的例子很贴切。紧急程度和警报的方式可以是两个不同的纬度。可以有不同的组合方式。
这与slf4j这一日志门面的设计有异曲同工之妙。slf4j其中有三个核心概念,logger,appender和encoder。分别指这个日志记录器负责哪个类的日志,
日志打印到哪里以及日志打印的格式。三个纬度上可以有不同的实现,使用者可以在每一纬度上定义多个实现,配置文件中将各个纬度的某一个实
现组合在一起就ok了。
- 行文至此,开头的那个问题也有了答案。一句话就是,桥接就是面向接口编程的集大成者。面向接口编程只是说在系统的某一个功能上将接口和
实现解藕,而桥接是详细的分析系统功能,将各个独立的纬度都抽象出来,使用时按需组合。
参考资料
极客时间-设计模式之美-第49讲