原文連結 作者: mohamed sanaulla 譯者: 李璟([email protected])
模闆方法模式是“四人幫”(譯者注:erich gamma, richard helm, ralph johnson and john vlissides)所著《design patterns book》一書中所描述的23種設計模式其中的一種,該模式旨在:
“define the skeleton of an algorithm in an operation, deferring some steps to subclasses. templatemethod lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure”。
即模闆方法定義一個算法的架構,并将某些步驟推遲到子類中實作。模闆方法允許子類在不改變算法架構的情況下,重新定義算法中某些步驟。
為了以更簡單的術語描述模闆方法,考慮這個場景:假設在一個工作流系統中,為了完成任務,有4個任務必須以給定的執行順序執行。在這4個任務中,不同工作流系統的實作可以根據自身情況自定義任務的執行内容。
模闆方法可以應用在上述場景中:将工作流系統的4個核心任務封裝到抽象類當中,如果任務可以被自定義,則将可自定義的任務推遲到子類中實作。
代碼實作:
我們來看看工作流系統如何使用:
輸出如下所示:
目前為止一切順利。但是本篇部落格的主要關注點不是模闆方法模式,而是如何利用java 8的lambda表達式和預設方法實作模闆方法模式。我之前已經說過,接口隻有在隻聲明了一個抽象方法的前提下,才可以使用lambda表達式。這個規則在本篇的例子中應這樣解釋:workflowmanager2隻能有一個抽象或者說自定義的任務。
如果你仍然對java 8中的lambda表達式和預設方法感到疑惑,可以在深入研究之前,花一點時間看一看lambda表達式和預設方法這兩篇文章。
我們可以利用帶有預設方法的接口替代抽象類,是以我們的新工作流系統如下所示:
現在我們的工作流系統帶有一個可自定義的任務2,我們繼續往下走,利用lambda表達式處理初始化工作:
這就是一個lambda表達式應用在模闆方法模式中的例子。