第七篇 调整类间关系 第二十章 - 责任链模式
桥接模式的精髓在于将类之间的关系建立在其抽象层面。沿着这样的设计思路,我们再把职责类似(都会传粉)的“蝴蝶”和“蜜蜂”关联起来。
设想一个蝴蝶和蜜蜂接力为油菜花传粉的情景。
// 传粉媒介
public abstract class Pollinatable {
private Pollinatable nextObj;
// 传粉媒介之间的“桥梁”
public Pollinatable next(Pollinatable obj) {
this.nextObj = obj;
return obj;
}
// 模板方法
public final void pollinate() {
this.doPollinate();
if (this.nextObj != null) {
this.nextObj.pollinate();
}
}
// 传粉
protected abstract void doPollinate();
}
“蝴蝶”和“蜜蜂”同属抽象的“传粉媒介”,为它们设置关联关系后会形成“A→B”式的链状结构。
看下用法。
// 蝴蝶
public class Butterfly extends Pollinatable {
// 传粉
@Override
protected void doPollinate() {
// 打团飞入菜花去。
}
}
// 蜜蜂
public class Bee extends Pollinatable {
@Override
protected void doPollinate() {
// 自信世间无别香。
}
}
// 测试类
public class Test {
public void test() {
Pollinatable obj1 = new Butterfly();
Pollinatable obj2 = new Bee();
Pollinatable obj3 = new Bee();
obj1.next(obj2).next(obj3);// 链状结构
obj1.pollinate();
}
}
“蝴蝶”和“蜜蜂”都是链状结构中的一环,它们依次完成责任内的工作,整体的任务也就随之完成了。这种写法也被称为责任链模式。
责任链模式实现了上下游伙伴类之间的松散耦合。
伙伴类各自变化时,它们共同的约定(模板方法也是一种约定)——pollinate()方法——保持不变。如此,伙伴类之间不会相互干扰,它们服务的对象(油菜花)也不受影响。
浙公网安备 33010602011771号