设计模式-桥接模式
桥接模式引言:
在过去软件与手机的硬件兼容性很糟糕,这就导致一些在 M 品牌上可以使用的应用却在 N 品牌上是不可以使用的。
我印象最深的就是 摩托罗拉-M ,在那个智能手机还未问世,按键机统治的时代,摩托罗拉在国内决对是个重量级选手的存在。
记得当时接触到的摩托罗拉中有大量的小游戏,当时的一款赛车游戏让时过数年后回忆起来,有种往返的怀念。当时的游戏是无法像现在这样,可以在不同的品牌手机上进行迁移的,游戏几乎是与手机平台进步绑定的。
如果按照当年的硬件与软件直接深度绑定的这种模式,让你重塑其硬件与软件之间的架构,使得软件可以跨不同的硬件平台运行,你会怎么进行设计呢?
首先第一种传统的架构理念,如下图。
可以发现这样的设计存在致命的问题,如果说,我要添加一个新的手机品牌,这就意味着我要同时再创建一个手机品牌通讯录类,手机品牌游戏类。当要添加一个新的应用的时候,每一个手机品牌下的都要再次创建一个新的类。
这样就会让这个系统的架构变得非常的冗余复杂,后期整个项目变得特臃肿。
或许你会觉得,这样设计唯一的问题就是,基于品牌进行抽象实现的,所以当我们的基于子类功能模块添加时,就会导致整个系统的都需要进行修改。聪明的你立马想到了另一个新的设计的架构模式。
但这样的设计同样的存在软件扩展所带来模块冗余的问题。。。。
合成/聚合复用原则
合成(Composition,也有翻译成组合)和聚合(Aggregation)都是关联的特殊种类。聚合表示一种弱的“拥有’关系,体现的是A 对象可以包含 B 对象,但 B 对象不是A 对象的一部分;合成则是一种强的“拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样IDPE]。比方说,大雁有两个翅膀,翅膀与大雁是部分和整体的关系,并且它们的生命周期是相同的,于是大雁和翅膀就是合成关系。而大雁是群居动物,所以每只大雁都是属于一个雁群,一个雁群可以有多只大雁,所以大雅和雁群是聚合关系。”
通过上面这种结构,很好将 手机品牌类 与 手机软件类 解绑松耦合到一起。
其实说到这里,关系桥接模式的原型已经设计完成。