使多个对象都有机会处理请求,从而避免请求的发送者和接收者直接的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
public abstract class Handler {
protected Handler successor;
public void setSuccessor(Handler successor) {
this.successor = successor;
}
public abstract void handleRequest();
}
public class ConcreteHandler1 extends Handler {
public void handleRequest() {
boolean someCondition = false;
if(someCondition) {
System.out.println("");
} else {
if(this.successor != null) {
this.successor.handleRequest();
}
}
}
}
public class ConcreteHandler2 extends Handler {
public void handleRequest() {
boolean someCondition = false;
if(someCondition) {
System.out.println("");
} else {
if(this.successor != null) {
this.successor.handleRequest();
}
}
}
}
客户端代码:
Handler h1 = new ConcreteHandler1();
Handler h2 = new ConcreteHandler2();
h1.setSuccessor(h2);
h1.handleRequest();
要注意在标准的职责链模式中,只要有对象处理了请求,这个请求就到此为止,不再被传递和处理了。
Web应用开发中的过滤器Filter,就类似于一个功能链,每个过滤负责自己的处理,然后转交给下一个过滤器,直到把所有的过滤器都走完,最后进入到Servlet中进行处理。
职责链模式Chain of Responsibility分离职责,动态组合
猜你喜欢
转载自katy1206.iteye.com/blog/2030032
今日推荐
周排行