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

设计模式之责任链模式

作者: 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