java 设计模式之责任链模式
责任链模式
类似日常生活中把一个任务分配给一群人,但他们都不太愿意干这事,所以他们就会一个一个推下去直到有一个人来处理这事件,

责任链模式定义:
使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。
责任链模式优点显而易见,降低了请求对象与处理对像之间的耦合度,处理对象易于扩展,增强了指派处理对象的灵活性。
责任链简化了对象之间的连接。每个对象只需保持一个指向其后继者的引用,不需保持其他所有处理者的引用,这避免了使用众多的 if 或者 if···else 语句。
使用场景:
一般如果由多个对象处理一个请求,需要使用哪对象由实际调用的时候确定。这种场景我们就可以使用调用者模式
代码示例:
/**
*
* @author androidos.net
* 抽象处理者基类
*
*/
public abstract class Handler {
Handler nextHandler;
void setNexdHandler(Handler hanlder) {
nextHandler= hanlder;
}
public Handler getNextHandler() {
return nextHandler;
}
public abstract void handRequest(String message);
}
/**
*
* @author androidos.net
* 处理者2
*/
public class ConcrectHandler2 extends Handler {
@Override
public void handRequest(String message) {
// TODO Auto-generated method stub
if(message.equalsIgnoreCase("2")) {
System.out.println("ConcrectHandler2:: "+message);
return;
}
if(null != getNextHandler()) {
getNextHandler().handRequest(message);
return;
}
System.out.println("这是最后一个处理者了,");
}
}
/**
*
* @author androidos.net
* 处理者3
*/
public class ConcrectHandler3 extends Handler {
@Override
public void handRequest(String message) {
// TODO Auto-generated method stub
if(message.equalsIgnoreCase("3")) {
System.out.println("ConcrectHandler3:: "+message);
return;
}
if(null != getNextHandler()) {
getNextHandler().handRequest(message);
return;
}
System.out.println("这是最后一个处理者了,处理者3,");
}
}请求发送者
public class Invoker {
public static void main(String[] args) {
ConcrectHandler1 handler1 = new ConcrectHandler1();
ConcrectHandler2 handler2 = new ConcrectHandler2();
ConcrectHandler3 handler3 = new ConcrectHandler3();
handler1.setNexdHandler(handler2);
handler2.setNexdHandler(handler3);
handler1.handRequest("6");
}
}执行输出:
版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。






评论