模板模式
模板模式看起來很簡單,看起來。。。。
先看一下uml圖吧:
這不就是乙個繼承麼?!子類完成超類的抽象方法?!
重要的是templetemethod();可以看到,它規定的operation1與operation2的執行順序。
定義:定義乙個操作中的演算法(也就是上圖中的templetemethod方法)的骨架,而將一些步驟延遲到子類中。
模板方法可以說,使用了**復用最常用的方式——繼承,顯然,這麼設計,減少了工作量。更重要的是,它給了某種演算法(templetemethod方法)制定了約束,確定這個演算法所使用的操作的順序。而具體的某種操作如何實現可以留給子類。
好處:
1. 一次性實現乙個演算法的不變部分,並將可變行為留給子類來實現。
2. 集中各個子類中的公共行為並將其置入乙個公共父類中,以避免**重複。
3. 為控制子類擴充套件超類操作的方式,可定義在特定點呼叫「鉤子」操作的模板方法,以允許在這些點進行擴充套件
注意(或者說是是實現技巧):
1.必須被子類過載的操作應定義為抽象的
2.如果模板方法本身不應被子類過載,應定義為final的
3.為允許子類在乙個演算法操作的特定點插入**,將「鉤子」操作插入模板方法。這些鉤子操作可能預設為什麼也不做
4. 使子類必須過載的運算元量最少化,否則開發者會感覺模板方法很乏味。
5.在模板方法中,父類呼叫子類的操作而不是相反。這是一種反向的控制結構,有時稱作「好萊塢法則」,即「別找我們,我們找你」
例子:
最好的例子就是,演算法老師講演算法時,總是給你一些偽**,甚至是自然語言!!你就可以把這些偽**抽象為乙個模板函式。然後定義子類去具體實現。
模板模式學習筆記
以豆漿為例子,製作黑豆豆漿 花生豆漿 純豆漿。製作的過程或者說流程都固定在乙個方法裡。子類只需要重寫必要的方法 這裡是新增調料 即可。1.豆漿基類 import android.util.log abstract class soymilk soak beat private fun select ...
設計模式學習筆記 模板 Template 模式
設計模式 設計模式,模板模式,template,模板方法 模板模式中的角色 模板模式可以很簡單的理解為,通過同乙個模具倒出來的模型。形狀上是一樣的,但是其上的花紋,紋理等卻可能完全不一樣。這裡的模板模式,特指template method模板方法模式。其原理為父類制定好規範 待實現的方法和模板方法。...
學習筆記 C C 設計模式 模板模式
模板設計模式是一種非常簡單的設計模式,其主要是利用了虛函式的特性實現。非常適合應用在一些演算法 流程 業務邏輯是固定的形式,其中某些步驟的實現方式又無法確定下來的場景。以下為模擬某晶元基於串列埠通訊的韌體公升級 可以提供乙個 firmwareupgrade 的類用於使用者整合。考慮到跨平台,該類的串...