行为型模式之六:责任链模式
行为型模式之六:责任链模式
刀狂剑痴 发表于2年前
行为型模式之六:责任链模式
  • 发表于 2年前
  • 阅读 11
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

责任链的主要意图是创建一个处理单元链,当每个单元满足阀值后都处理请求。当链建立之后,如果一个单元没有满足,就会尝试下一个单元,依次下去,每个请求都会单独通过链。

责任链类图

责任链的Java代码

package designpatterns.cor;
 
abstract class Chain {
  public static int One = 1;
  public static int Two = 2;
  public static int Three = 3;
  protected int Threshold;
 
  protected Chain next;
 
  public void setNext(Chain chain) {
    next = chain;
  }
 
  public void message(String msg, int priority) {
    //if the priority is less than Threshold it is handled
  	if (priority <= Threshold) {
      writeMessage(msg);
    }
 
    if (next != null) {
      next.message(msg, priority);
    }
  }
 
  abstract protected void writeMessage(String msg);
}
 
class A extends Chain {
  public A(int threshold) { 
    this.Threshold = threshold;
  }
 
  protected void writeMessage(String msg) {
    System.out.println("A: " + msg);
  }
}
 
 
class B extends Chain {
  public B(int threshold) { 
    this.Threshold = threshold;
  }
 
  protected void writeMessage(String msg) {
    System.out.println("B: " + msg);
  }
}
 
class C extends Chain {
  public C(int threshold) { 
    this.Threshold = threshold;
  }
 
  protected void writeMessage(String msg) {
    System.out.println("C: " + msg);
  }
}
 
 
public class ChainOfResponsibilityExample {
 
  private static Chain createChain() {
    // Build the chain of responsibility
 
  	Chain chain1 = new A(Chain.Three);
 
  	Chain chain2 = new B(Chain.Two);
  	chain1.setNext(chain2);
 
    Chain chain3 = new C(Chain.One);    
    chain2.setNext(chain3);
 
    return chain1;
  }
 
  public static void main(String[] args) {
 
  	Chain chain = createChain();
 
    chain.message("level 3", Chain.Three);
 
    chain.message("level 2", Chain.Two);
 
    chain.message("level 1", Chain.One);
  }
}

输出

A: level 3
A: level 2
B: level 2
A: level 1
B: level 1
C: level 1

在这个例子中,Leve1 通过了链中所以单元。 这是wiki中例子的简化: http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern 责任链在Java JDK中使用 (PS:原文中没有下方了,但是Java中类加载器就是使用了责任链模式)

共有 人打赏支持
粉丝 18
博文 111
码字总数 82582
×
刀狂剑痴
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: