第七篇 调整类间关系 第二十章 - 责任链模式

  桥接模式的精髓在于将类之间的关系建立在其抽象层面。沿着这样的设计思路,我们再把职责类似(都会传粉)的“蝴蝶”和“蜜蜂”关联起来。
  设想一个蝴蝶和蜜蜂接力为油菜花传粉的情景。

// 传粉媒介
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()方法——保持不变。如此,伙伴类之间不会相互干扰,它们服务的对象(油菜花)也不受影响。

posted on 2025-03-28 22:13  星辰河岳  阅读(28)  评论(0)    收藏  举报