现在对不同手机类型的不同品牌的实现(开机、关机、上网、打电话)操作编程,如图:
扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类。同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本。解决方案使用桥接模式。
桥接模式是一种结构型设计模式, 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构, 从而能在开发时分别使用。
问题的根本原因是我们试图在两个独立的维度——类型与品牌——上扩展手机类。 这在处理类继承时是很常见的问题。桥接模式通过将继承改为组合的方式来解决这个问题。 具体来说, 就是抽取其中一个维度并使之成为独立的类层次, 这样就可以在初始类中引用这个新层次的对象, 从而使得一个类不必拥有所有的状态和行为。
根据该方法, 我们可以将品牌相关的代码抽取到拥有Huawei和 xiaomi、apple三个子类的颜色类中, 然后在 类型类中添加一个指向某一品牌对象的引用成员变量。 现在, 类型类可以将所有与品牌相关的工作委派给连入的品牌对象。 这样的引用就成为了 类型和 品牌之间的桥梁。 此后, 新增品牌将不再需要修改类型的类层次, 反之亦然。
抽象部分 (也被称为接口) 是一些实体的高阶控制层。 该层自身不完成任何具体的工作, 它需要将工作委派给实现部分层 (也被称为平台)。注意, 这里提到的内容与编程语言中的接口或抽象类无关。 它们并不是一回事。