8、BRIDGE
桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化。
桥梁模式很好的体现了
"开-闭“ 原则 (OCP) 以及
”组合/聚合复用原则“ (CARP)
一个不好的设计 :
使用桥梁模式的设计 :
八戒投胎的故事 :
假设 :
有了上面的假设 我们 用 桥梁模式 完美 设计 :
肉体和灵魂 本来有 继承关系 。
但为了 让 灵魂和 肉体 各自 演化 , 设计成桥梁模式 ,在 灵魂 中 有一个 对肉体的 引用。
如 飞机那个例子 :
abstract public class Airplane {
protected AirplaneMaker airplaneMaker;
abstract public void fly() ;
}
飞机抽象类 有 一个 对 飞机生产厂 的 引用。 飞机上飞机厂造的,所以飞机里有对飞机厂的引用,肉体上灵魂托生的 所以肉体里有对灵魂的引用,颜料是用毛笔表现出来的 所以 颜料里有对毛笔的引用。
这里假设 是 飞机生产厂(AirplaneMaker) 和 飞机(Airplane) 有一种 继承关系 (难理解怎么会有这种关系,但假设有。)
蜡笔与燃料的例子
小时候我们都用蜡笔画画,一盒蜡笔12种颜色。一开始我都是用最小号的蜡笔画个太阳公公、月亮婆婆足够了。后来开始画一些抽象派的作品,就得换中号的了,要不然画个背景都要描半天,好一盒中号的也是12种颜色。再后来我开始转向豪放派,中号就有些捉襟见肘了,只好换大号的了,好一盒大号的也只有12种颜色。你看,像我这样不太出名的画家就需要36种画笔,哇,太麻烦了。但是据我观察,另一些比我出名的画家倒是没有这么多笔,他们只有几把刷子和一些颜料,这样就解决了蜡笔的“种类爆炸”问题。”
桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。