美文网首页
设计模式之责任链模式

设计模式之责任链模式

作者: GitCode8 | 来源:发表于2019-03-15 10:00 被阅读0次

    责任链模式,将一次请求任务,分发给多个请求者的一条链,使用这种设计方式,可以将接收者和发送者进行解耦。

    优点:

    • 降低耦合,解耦发送者和接收者。
    • 简化对象,对象不需要知道链中其他对象。
    • 增加新的请求处理类很方便。
      缺点
    • 影响性能,可能造成循环调用
    • 不利于排错
    • 发送者的请求不一定被接受者接收

    下面举个栗子:
    当项目经理提了个需求给工程师,工程师做不来,上报个技术总监。总监觉得需求不可能实现,上报个事业部经理的责任流程。
    1、 首先定义抽象类Handler,表示工程师,总监,经理都可以处理工作和上报工作。

    public abstract class Handler {
    
        protected Handler nextHandler;
    
    
        public void setNextHandler(Handler nextHandler) {
            this.nextHandler = nextHandler;
        }
    
        public abstract void handle();
    
        public  void report(){
            if (nextHandler!=null){
                nextHandler.handle();
            }
        }
    
    }
    

    2 、 定义工程师,总监,经理

    public class Developer extends Handler {
        @Override
        public void handle() {
            System.out.println("软件工程师:这个需求我实现不了,需要上报个上级");
            nextHandler.handle();
        }
    }
    
    public class Director extends Handler {
        @Override
        public void handle() {
            System.out.println("总监:这个需求技术实现不了,上报总经理吧");
            nextHandler.handle();
        }
    }
    public class Manager extends Handler {
        @Override
        public void handle() {
            System.out.println("经理:技术实现不了,就换个需求,或者换种模式,处理事情要灵活点,你们三在好好沟通下");
        }
    }
    
    

    从代码来看,当自己处理不了工作时,上报给上级。
    3、 运行

    public class Main {
    
        public static void main(String[] args) {
    
            Developer developer=new Developer();
    
            Director director=new Director();
    
            Manager manager=new Manager();
    
    
            developer.setNextHandler(director);
    
            director.setNextHandler(manager);
    
            developer.handle();
    
    
    
        }
    }
    

    运行结果

    软件工程师:这个需求我实现不了,需要上报个上级
    总监:这个需求技术实现不了,上报总经理吧
    经理:技术实现不了,就换个需求,或者换种模式,处理事情要灵活点,你们三在好好沟通下
    

    从第三步就可以看出责任链模式的优缺点。当工程师可以处理事情,总监和经理就是接收不到请求,这里有新建对象,造成性能问题。在处理事情,如果handle方法复杂,是否调用下一个责任链,这样的排错也比较困难。

    相关文章

      网友评论

          本文标题:设计模式之责任链模式

          本文链接:https://www.haomeiwen.com/subject/pswkmqtx.html