Java责任链模式
niuyongzhi 人气:01.什么是责任链模式
当一个请求可能需要多个对象中的某个进行处理时,将这些对象连成一条链,并沿者这条链传递该请求,知道有一个对象处理它为止。这样的情况或需求时,可以采用责任链模式。
2.如何实现
1)处理者接口(Handler),负责定义处理请求的抽象方法,并设置下一个处理着的方法。
2)具体处理者,实现Handler接口中定义的方法。实现处理用户请求的逻辑,并设置下一个处理请求的对象。如果能够处理用户求情就处理,如果不能处理,交给下一个对象进行处理。
3)封装类。对以上的具体处理者进行封装,使它们形成一个处理链条。
3.代码实现
以一个资金审批举例
1)处理者接口
/** * 处理者接口 * 定义处理请求的方法 * 设置下一个处理者 */ public interface Handler { public void handleRequest(int money); public void setNextHandler(Handler handler); }
2)处理者1
/** * 具体处理者--经理 */ public class Manager implements Handler { Handler handler; @Override public boolean handleRequest(int money) { boolean result = false; if(money<1000){ System.out.println("同意"); result = true; }else{ //超出处理范围,交给下一个处理着 if(handler!=null){ result = handler.handleRequest(money); } } return result; } @Override public void setNextHandler(Handler handler) { this.handler = handler; } }
3)处理着2
/** * 具体处理者--总经理 */ public class GeneralManager implements Handler { Handler handler; @Override public boolean handleRequest(int money) { boolean result = false; if(money<10000){ System.out.println("同意"); result = true; }else{ //超出处理范围,交给下一个处理着 if(handler!=null){ result = handler.handleRequest(money); } } return result; } @Override public void setNextHandler(Handler handler) { this.handler = handler; } }
4)封装类
/** * 封装类 * 将所有的具体处理者封装成一条处理链 */ public class Contxt { private Handler handler1,handler2; public Contxt(){ } public void createHandlerChain(){ handler1 = new Manager(); handler2 = new GeneralManager(); handler1.setNextHandler(handler2); } public void responseRequest(int request){ handler1.handleRequest(request); } }
5)测试类
public class TestMain { public static void main(String args []){ int meney = 500; Contxt context = new Contxt(); //创建处理链 context.createHandlerChain(); //相应请求 boolean result = context.responseRequest(meney); System.out.println(result); } }
4.总结
责任链模式的优点
1)责任链中的对象只和自己的后继是低耦合关系,和其他对象毫无关联,是程序更加的灵活。
2)程序可以动态的增加、删除处理者的关系,或重新委派新的处理者
加载全部内容