責任鏈的主要意圖是建立一個處理單元鏈,當每一個單元知足閥值後都處理請求。當鏈創建以後,若是一個單元沒有知足,就會嘗試下一個單元,依次下去,每一個請求都會單獨經過鏈。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); } }
輸出less
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中類加載器就是使用了責任鏈模式)ui