在实际生活中,某些事物由于自身的逻辑,具有两个或多个维度的变化。
考虑这样一个场景:国家武装力量分为海军、陆军、空军三个军种,海陆空三军各自又有军师旅团营等
建制。对于各个军种,以上的建制单位所包含的人数是不一样的。陆军人数较多,而空军人数较少。这样就
产生了两个维度,一个是军种维度,另一个是具体的各个军种的建制制度。在军种制度,可以增加例如“外空”
的新军种;在建制维度,可以修改在各个军种中的人数,或者增加一个新的军事单位。
在软件设计中,又如何应对这种“多维度的变化”?如何巧妙的设计软件,使得系统可以沿着两个或多个维度
进行独立地增加或者变化,而这种变化又不会对现有的类产生影响。这种场景可以使用桥接模式(Bridge Pattern)
其意图是将一个软件设计的抽象部分与实现部分分离,使他们都可以独立地变化。
在所设计的程序中有几个维度时,将抽象部分和实现部分分离的设计,可以使程序独立,互不影响地增加
类,而不需要改变甚至不需要重新编译原来已经存在的类。
现实实例:
自动茶水销售机的实例:该机器销售的茶水在杯子的体积上分为中杯和大杯,在茶叶品种上分为红茶和绿茶,
对其进行销售程序设计。
类图设计
将抽象部分与实现部分分离开来,抽象部分为茶杯大小,实现部分为茶的种类,将其分离开来,这样就比
较容易在茶的品种和茶杯的体积方面增加新的类。
桥接模式的特点:
(1)分离接口和实现部分。
(2)提高可扩展性。可以独立的对抽象部分和实现部分进行扩展。
(3)实现细节对客户的透明。可以客户隐藏实现细节。
桥接模式强调对象有两个以上的维度变化,简化多级继承关系,但同时增加了聚合对象的内部方法,因为
它不得不多写方法以便包含它的类调用。