软件编程
位置:首页>> 软件编程>> java编程>> Java实现设计模式之责任链模式

Java实现设计模式之责任链模式

作者:niuyongzhi  发布时间:2023-12-09 21:02:12 

标签:Java,设计模式,责任链模式

1.什么是责任链模式

当一个请求可能需要多个对象中的某个进行处理时,将这些对象连成一条链,并沿者这条链传递该请求,知道有一个对象处理它为止。这样的情况或需求时,可以采用责任链模式。

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)程序可以动态的增加、删除处理者的关系,或重新委派新的处理者

来源:https://blog.csdn.net/niuyongzhi/article/details/123291023

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com