用Lambda重構責任模式鏈
責任鏈模式是建立處理物件鏈(例如一系列操作)的通用解決方案。一個處理物件可以做一些工作並將結果傳遞給另一個物件,然後該物件也做一些工作並將其傳遞給另一個處理物件,依此類推。
責任鏈模式:不使用Lambda表示式
步驟1:通常,透過定義表示處理物件的抽象類來實現該模式,該處理物件定義用於跟蹤後繼的欄位。一旦完成工作, 處理物件將其工作交給其繼任者。在程式碼中它看起來像這樣:
public abstract class ProcessingObject<T> { protected ProcessingObject<T> successor; public void setSuccessor(ProcessingObject<T> successor) { this.successor = successor; } public T handle(T input) { T r = handleWork(input); if (successor != null) { return successor.handle(r); } return r; } abstract protected T handleWork(T input); } |
方法handle提供瞭如何處理一項工作的概述。透過繼承類ProcessingObject併為方法handleWork提供實現,可以建立不同型別的處理物件 。
讓我們看一個如何使用這種模式的例子。您可以建立兩個處理物件進行一些文字處理:
public class HeaderTextProcessing extends ProcessingObject<String> { public String handleWork(String text) { return "From Raoul, Mario and Alan: " + text; } } public class SpellCheckerProcessing extends ProcessingObject<String> { public String handleWork(String text) { return text.replaceAll("labda", "lambda"); } } |
讓我們編寫程式碼來測試上面沒有lambda表示式的程式碼:
public static void main(String[] args) { ProcessingObject<String> p1 = new HeaderTextProcessing(); ProcessingObject<String> p2 = new SpellCheckerProcessing(); p1.setSuccessor(p2); String result1 = p1.handle("Aren't labdas really sexy?!!"); System.out.println(result1); } |
責任鏈模式:使用Lambda表示式
透過使用lambda表示式,我們可以避免建立子類來實現handleWork()方法。我們可以將處理物件表示為Function <String,String> 的例項, 或者更確切地說是 UnaryOperator <String> 。要連結它們,我們只需要使用andThen 方法來組合這些函式 。
public static void main(String[] args) { // First processing object UnaryOperator<String> headerProcessing = (String text) -> "From Raoul, Mario and Alan: " + text; //Second processing object UnaryOperator<String> spellCheckerProcessing = (String text) -> text.replaceAll("labda", "lambda"); // Compose the two functions resulting in a chain of operations. Function<String, String> pipeline = headerProcessing.andThen(spellCheckerProcessing); String result2 = pipeline.apply("Aren't labdas really sexy?!!"); System.out.println(result2); } |
相關文章
- 責任鏈模式模式
- 責任鏈模式妙用模式
- 「責任鏈模式」栗子模式
- 責任鏈模式探究模式
- 設計模式 —— 責任鏈模式設計模式
- Java責任鏈模式(ChainofResponsibility模式)Java模式AI
- 設計模式(責任鏈模式)設計模式
- 設計模式-責任鏈模式設計模式
- 設計模式 | 責任鏈模式及典型應用設計模式
- 5、php責任鏈模式PHP模式
- 23_責任鏈模式模式
- PHP-責任鏈模式PHP模式
- 這就是『責任鏈模式』?模式
- 責任鏈模式(Chain Of Responsibility)模式AI
- 責任鏈模式在 Spring 中的應用模式Spring
- 設計模式(三) 責任鏈模式設計模式
- 設計模式之責任鏈模式設計模式
- 設計模式之——責任鏈模式設計模式
- Design Patterns in Android:責任鏈模式Android模式
- Netty中的責任鏈模式Netty模式
- Chain of responsibility-責任鏈模式AI模式
- 責任鏈模式(案例解析)(9)模式
- 責任鏈模式的實踐模式
- 聊一聊責任鏈模式模式
- JAVA設計模式之責任鏈模式Java設計模式
- 設計模式系列之「責任鏈模式」設計模式
- PHP 設計模式之責任鏈模式PHP設計模式
- 極簡設計模式-責任鏈模式設計模式
- 設計模式(四)OkHttp的責任鏈模式設計模式HTTP
- Java學設計模式之責任鏈模式Java設計模式
- 設計模式第七講-責任鏈模式設計模式
- 我的Java設計模式-責任鏈模式Java設計模式
- 代理模式增強之路(代理+責任鏈模式)模式
- 使用職責鏈模式來重構你的程式碼模式
- c#中責任鏈模式詳解C#模式
- 責任鏈模式在SpringAOP中的使用模式Spring
- 程式碼精簡之路-責任鏈模式模式
- Rust語言之GoF設計模式:責任鏈模式RustGo設計模式