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 –