桥接模式:将抽象部分与它的实现部分分离,使得二者可以独立地变化。(说实话,这个很难理解!!!)
抽象部分:继承关系里的抽象类,一般位于上层,平台无关
实现部分:继承关系里的实现类,一般位于底层,平台相关、实现细节
还是不理解,看实例讲解吧!
比如对一个操作系统来说,平台无关的是高层代码,属于抽象部分,而底层Bootloader、驱动程序则属于实现部分,是平台相关的。这里假设该操作系统具有良好的可移植性,即遵循DIP原则。
图1:可以移植的操作系统模型
对一个操作系统只要遵循这个模型,那么它就具备非常高的移植性。我们来看如何将这个操作系统轻松的移植到不同的硬件平台上去,假设需要移植到硬件平台由Intel x86、ARM2410、AMD:
图2:OS在不同硬件平台的移植
到目前为止,我们的操作系统OS都还是一个抽象的概念,我们还没有具体到某一个具体的操作系统,比如windows。那么,如果windows遵循这个模型,继承了OS这个抽象是什么效果了,可想而知,应该如下面这样:
图3:使windows具有可移植性
然后是Linux、MacOS,注意:不能让乔布斯知道 :)
图4:使linux和mac os继承OS
还是被乔布斯发现了:(,他说你个笨蛋,做了这么垃圾的东西出来。。。免不了跟乔布斯大吵一架 (因为你知道,一旦你说服乔布斯,他就会把这个想法占位己有,这对MacOS的推广是有利的)
你跟乔布斯解释道:一旦继承了OS,MacOS就会天生支持ARM、Intel、AMD等无数的芯片,再也不用为选芯片烦恼了,,,你继续巴拉巴拉说了一大堆。乔布斯最终同意了你的做法。
乔布斯为什么最终会同意呢,或许他明白了,你这里采用了一种设计模式——桥接模式(正好也姓乔,难怪乔布斯会同意),这的确是个好模式,几乎是完美的,它可以实现软件世界和硬件世界的大统。
为什么说这是桥接模式,来看看桥接模式的结构图,你就会恍然大悟了:
图5:桥接模式结构图
从图4和图5的对比,我们发现了对应关系:
OS——Abstraction
Windows、Linux、MacOS——RefinedAbstraction
移植接口——Implementor
ARM移植接口实现——ConcreteImplementorA
Intel x86移植接口实现——ConcreteImplementorB
再反过来理解一下桥接模式的定义吧:将抽象部分与它的实现部分分离,使得二者可以独立地变化。
新版MacOS上市了,终于MacOS可以跑在任何平台上,一经推出由于其友好的用户界面,很快把Windows灭了。。。。。乔布斯在天堂开心的笑了!