­

Java中的责任链设计模式,太牛了!

  • 2019 年 11 月 27 日
  • 筆記

责任链设计模式的思想很简单,就是按照链的顺序执行一个个处理方法,链上的每一个任务都持有它后面那个任务的对象引用,以方便自己这段执行完成之后,调用其后面的处理逻辑。

下面是一个责任链设计模式的简单的实现:

public interface Task {    public void run();  }    public class Task1 implements Task{      private Task task;      public Task1() {}      public Task1(Task task){      this.task = task;    }    @Override    public void run() {      System.out.println("task1 is run");      if(task != null){        task.run();      }    }  }    public class Task2 implements Task{      private Task task;      public Task2() {}      public Task2(Task task){      this.task = task;    }    @Override    public void run() {      System.out.println("task2 is run");      if(task != null){        task.run();      }    }  }    public class Task3 implements Task{      private Task task;      public Task3() {}      public Task3(Task task){      this.task = task;    }    @Override    public void run() {      System.out.println("task3 is run");      if(task != null){        task.run();      }    }  }

以上代码是模拟了三个任务类,它们都实现了统一个接口,并且它们都一个构造函数,可以在它们初始化的时候就持有另一个任务类的对象引用,以方便该任务调用。

这个和服务器的过滤器有点类似,过滤器的实现也都是实现了同一个接口Filter。

public class LiabilityChain {      public void runChain(){      Task task3 = new Task1();      Task task2 = new Task2(task3);      Task task1 = new Task3(task2);      task1.run();    }    }

上面这段代码就是一个任务链对象,它要做的事情很简单,就是将所有要执行的任务都按照指定的顺序串联起来。

public class ChainTest {      public static void main(String[] args) {      LiabilityChain chain = new LiabilityChain();      chain.runChain();    }    }  当我们获取到责任链对象之后,调用其方法,得到以下运行结果:

以上是一个责任链的简单的实现,如果想要深入理解其思想,建议去观察一个过滤器链的执行源码。

作者:Mazin

https://my.oschina.net/u/3441184/blog/889552

– END –