lambda表达式方法泛型_模板方法模式–使用Lambda表达式,默认方法
lambda表達式方法泛型
模板方法模式是Erich Gamma,Richard Helm,Ralph Johnson和John Vlissides在著名的《 設計模式》一書中解釋的23種設計模式之一。 這種模式的意圖表示為:
在操作中定義算法的框架,將某些步驟推遲到子類。 TemplateMethod允許子類重新定義算法的某些步驟,而無需更改算法的結構。
為了簡單地解釋,請考慮以下情形:假設有一個工作流系統,其中必須以給定的順序執行4個任務才能成功完成工作流。 4個任務中的一些任務可以通過以下方式自定義
不同的工作流程系統實施。
通過將工作流系統封裝到一個抽象類中,而實現的4個任務中只有很少的任務,可以將模板方法模式應用于上述場景。 將其余任務的實現留給抽象類的子類。
所以上面的實現時:
/*** Abstract Workflow system*/ abstract class WorkflowManager2{public void doTask1(){System.out.println("Doing Task1...");}public abstract void doTask2();public abstract void doTask3();public void doTask4(){System.out.println("Doing Task4...");} }/*** One of the extensions of the abstract workflow system*/ class WorkflowManager2Impl1 extends WorkflowManager2{@Overridepublic void doTask2(){System.out.println("Doing Task2.1...");}@Override public void doTask3(){System.out.println("Doing Task3.1...");} }/*** Other extension of the abstract workflow system*/ class WorkflowManager2Impl2 extends WorkflowManager2{@Overridepublic void doTask2(){System.out.println("Doing Task2.2...");}@Override public void doTask3(){System.out.println("Doing Task3.2...");} }讓我繼續說明如何使用這些工作流程實現:
public class TemplateMethodPattern {public static void main(String[] args) {initiateWorkFlow(new WorkflowManager2Impl1());initiateWorkFlow(new WorkflowManager2Impl2());}static void initiateWorkFlow(WorkflowManager2 workflowMgr){System.out.println("Starting the workflow ... the old way");workflowMgr.doTask1();workflowMgr.doTask2();workflowMgr.doTask3();workflowMgr.doTask4();} }和輸出將是..
Starting the workflow ... the old way Doing Task1... Doing Task2.1... Doing Task3.1... Doing Task4... Starting the workflow ... the old way Doing Task1... Doing Task2.2... Doing Task3.2... Doing Task4...到目前為止,一切都很好。 但是,本文的主要目的不是創建有關Template Method模式的另一篇博客文章,而是了解如何利用Java 8 Lambda Expression和Default Methods 。 我之前已經寫過,只有具有單個抽象方法的接口才能被編寫為lambda表達式。 在此示例中,這意味著在四個任務中,WorkflowManager2只能包含一個抽象/可自定義任務。
因此,限制為一種抽象方法是一個主要限制,可能不適用于許多實時方案。 我不想重復相同的舊模板方法模式示例,而我寫此文件的主要目的是說明在使用單個抽象方法處理抽象類的方案中如何利用lambda表達式和默認方法。
如果您想知道Java中的這些lambda表達式以及Java中的這些默認方法是什么意思,那么在繼續進行之前,請花一些時間閱讀有關lambda表達式和默認方法的信息 。
我們將使用帶有默認方法的接口來代替抽象類,因此我們的工作流系統將如下所示:
interface WorkflowManager{public default void doTask1(){System.out.println("Doing Task1...");}public void doTask2();public default void doTask3(){System.out.println("Doing Task3...");}public default void doTask4(){System.out.println("Doing Task4...");} }現在,我們有了帶有可自定義Task2的工作流系統,我們將繼續使用Lambda表達式啟動一些自定義工作流…
public class TemplateMethodPatternLambda {public static void main(String[] args) {/*** Using lambda expression to create different * implementation of the abstract workflow*/initiateWorkFlow(()->System.out.println("Doing Task2.1..."));initiateWorkFlow(()->System.out.println("Doing Task2.2..."));initiateWorkFlow(()->System.out.println("Doing Task2.3..."));}static void initiateWorkFlow(WorkflowManager workflowMgr){System.out.println("Starting the workflow ...");workflowMgr.doTask1();workflowMgr.doTask2();workflowMgr.doTask3();workflowMgr.doTask4();} } 這是可以在模板方法模式中利用lambda表達式的一種小方法
翻譯自: https://www.javacodegeeks.com/2013/05/template-method-pattern-using-lambda-expressions-default-methods.html
lambda表達式方法泛型
總結
以上是生活随笔為你收集整理的lambda表达式方法泛型_模板方法模式–使用Lambda表达式,默认方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梵语的读音 梵语的相关知识
- 下一篇: 67数字代表什么含义 67数字的寓意