定义如下:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
责任链模式由两个角色组成:
1) 处理者角色(Handler):它定义了一个处理请求的。当然对于链子的不同实现,也可以在这个角色中实现后继链。
2) 具体处理者角色(Concrete Handler):实现抽象角色中定义的接口,并处理它所负责的请求。如果不能处理则它的后继者。
纯的责任链模式,一个具体处理者角色只能对请求作出两种:自己处理;传给下家。不能出现处理了一部分,把剩下的传给了下家的情况。而且请求在责任链中必须被处理,而不能出现无果而终的结局。
反之,则就是不纯的责任链模式。
不纯的责任链模式还算是责任链模式吗?比如一个请求被捕获后,每个具体处理者都尝试去处理它,不管结果如何都将请求再次转发。我认为这种方式的实现,算不算是责任链模式的一种倒不重要,重要的是我们也能从中体味到责任链模式的思想:通过将多个处理者之间联系,来达到请求与具体的某个处理者的解耦。
//抽象处理者(Handler)角色 Handler.java public abstract class Handler { protected Handler successor; public abstract void handleRequest(); public void setSuccessor(Handler successor) { this.successor = successor;
} public Handler getSuccessor() { return successor; } }
// ConcreteHandler1.java public class ConcreteHandler1 extends Handler { public void handleRequest() { boolean someCondition = true; if (someCondition) {
//如果满足条件,进行处理
} else { //否则,传递给下家处理 if (successor != null) { successor.handleRequest(); } } } }
// ConcreteHandler2.java public class ConcreteHandler2 extends Handler { public void handleRequest() { boolean someCondition = true; if (someCondition) {
//如果满足条件,进行处理
} else { //否则,传递给下家处理 if (successor != null) {
successor.handleRequest();
} } } }
public class Client {
public static int Main(String[] args) {
// Set up chain (usually one need to be done once) Handler firstHandler = new ConcreteHandler1();
Handler secondHandler = new ConcreteHandler2();
//Handler thirdHandler = new ConcreteHandler3();
firstHandler.setSuccessor(secondHandler);
//secondHandler.SetSuccessor(thirdHandler);
firstHandler.handleRequest();
return 0;
}
}
|
阅读(1259) | 评论(0) | 转发(0) |