模式十 模板方法模式

2021-04-19 09:07:16 字數 2427 閱讀 2109

10.1

模板方法模式定義

在乙個方法中定義乙個演算法的框架,而將一些步驟延遲到子類中。模板方法可以使得子類在不改變演算法結構的情況下,重新定義演算法中的某些步驟。

10.2

模板方法模式

uml類圖:

模式方法的定義:

void templatemethod()

。模式方法不能宣告成

virtual

是因為當然不允許子類改變演算法的框架。

10.3應用場景:

模組方法在定義整個演算法的框架時特別有用,它甚至可以說是用得最多的設計模式之一。當我們某乙個演算法有公共步驟可能被需要子類用到,而某些步驟是必需由子類實現的,這時我們就可以利用模板方法模式。例如我們製作咖啡的演算法,沖水這個動作是所有咖啡都要用到的,而放調料這個演算法是由不同的咖啡(子類)來決定的,因為不同的咖啡放的是不同的調料,這時我們就可以將咖啡製作定義成乙個模組方法,其中呼叫抽象方法放調料和非抽象方法沖水。

10.4模板方法模式分析與實現(c#描述):

//最簡單的模板方法示例

namespace ******templatemethod

public

void wash()//

洗蘋果的動作對所有蘋果來說都一樣,因此這裡設為非抽象方法,被所有子類所共用。

public

abstract

void cut();//

抽象方法,由子類決定如何切蘋果。

//這裡又是讓子類決定,是不是跟工廠方法的讓子類決定很相似呢?呵呵。其實,工廠方法就是模板方法的乙個特例。因為工廠方法讓子類決定的是類的建立,而模板方法讓子類決定的是演算法的步驟。

}

//紅蘋果,其切法為每個蘋果切成2塊。

public

class}//

黃蘋果,其切法為每個蘋果切成4塊。

public

class}//

呼叫類public

class

******templatemethod_test}}

//帶鉤子的模板方法示例。鉤子在這裡是用於決定演算法流程的乙個方法。

namespace templatemethodwithhook

}public

void

wash

()public

abstract

void cut();

//鉤子,子類通過對其控制可以改變演算法流程。

public

virtual

bool cancut()

}

//紅蘋果,其切法為每個蘋果切成2塊。

public

class}//

黃蘋果,其切法為每個蘋果切成4塊。

public

class

public

override

bool cancut()//

黃蘋果不允許將蘋果進行切分。

}//呼叫類

public

class

templatemethodwithhook_test}}

namespace templatemethodincsharp

set

}private

int _weight;

public bird(string astg_name,int aint_weight)

public

int compareto(object obj)//compareto

為模板方法中的某個步驟,這裡我們定義以鳥的排序規則:根據重量排序,重量較輕的順序在前,重量較重的順序在後。}//

呼叫類public

class

templatemethodincsharp_test

;

array.sort(arr_birds);

for (int lint_loopcount = 0; lint_loopcount < arr_birds.length; lint_loopcount++)

//模板方法說的是利用繼承讓子類實現父類中的抽象演算法步驟,這裡沒有用到繼承為什麼也是模板方法呢?請注意,模板方法的實現形態可以多種多樣的,這種算是模板方法的變體吧。

}

}

}

這個模式用來建立乙個演算法的模板。什麼是模板?實際上模板就是乙個方法,這個方法將演算法定義成一組步驟,其中的任何步驟都要以是抽象的,由子類進行實現,這樣就要以保證演算法的整體框架不變,然後由子類提供部分實現。

設計模式(十) 模板方法模式

一 概述 模板方法模式在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法中的某些步驟。二 結構類圖 三 解決問題 模板方法就是提供乙個演算法框架,框架裡面的步驟有些是父類已經定好的,有些需要子類自己實現。相當於要去辦一件事情,行...

設計模式之十 模板方法模式

感覺就是父類中定義個方法的介面,讓子類去具體實現,每個子類的實現方式都不一樣。既然用了繼承,並且肯定這個繼承有意義,就應該要成為子類的模板,所有重複的 都應該要上公升到父類去,而不是讓每個子類都去重複。當我們要完成在某一細節層次一致的乙個過程或一系列步驟,但其個別步驟在更詳細的層次上的實現可能不同時...

行為型模式(十) 模板方法模式

模板方法 template method 模式 定義乙個操作中的演算法骨架,而將演算法的一些步驟延遲到子類中,使得子類可以不改變該演算法結構的情況下重定義該演算法的某些特定步驟。它是一種類行為型模式。優點 1 它封裝了不變部分,擴充套件可變部分。它把認為是不變部分的演算法封裝到父類中實現,而把可變部...