桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使他们都可以独立地变化。它是一种对象结构型模式,又称为柄体模式或接口模式。
其存在一条连接两个继承等级结构的桥。
某软件公司欲开发一个跨平台图像浏览系统,要求该系统能够显示JGP, GIF, PNG等多种格式的文件,并且可以在Windows, Linux, Unix等多个操作系统上运行,应该如何设计呢?
初始设计方案: 上述设计方案可以实现所需功能,但是需要分析下其缺点:
由于采用了多层继承结构,导致系统中类的个数急剧增加系统扩展麻烦,由于每一个具体类既包含图像文件格式信息,又包含操作系统信息,因此无论是增加新的图像文件格式还是增加新的操作系统,都需要增加大量的具体类上面的问题其实就涉及到***多维度***的问题,即图片格式是一个维度,不同操作系统又是一个维度,多维度使用多继承来解决是一个非常直接的解决方案,但是其缺点很明显。
所以我们要寻求新的解决方案,想想能否把多继承关系变成组合关系呢?直接上图: 可以看出两种解决方案的区别:第一种使用继承来解决多维度问题,第二种使用组合来解决多维度问题,即将在不同操作系统下的显示组合到Image类里面。虽然多继承和组合都是耦合关系,但是用组合来解决多维度问题更具优点,而且再结合配置文件+反射可以很好的实现符合开闭原则的解决方案。
因为使用该设计模式要求程序员能够识别出多维度问题,所以举例说明几个多维度问题。