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"); } }
执行输出:
版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。
评论