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 –