設計模式之模板方法

2022-08-13 06:45:13 字數 1808 閱讀 4692

aug 16, 2015

模板方法(templatemethod)定義了乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。

模板方法是一種**復用的基本技術,在類庫中尤為重要,因為他們提取了類庫中的公共行為。模板方法導致一種反向的控制結構,這種結構就是傳說中的「好萊塢法則」,即「別找我們,我們找你」,這指的是父類呼叫乙個類的操作,而不是相反。具體體現是物件導向程式設計程式語言裡的抽象類(以及其中的抽象方法),以及繼承該抽象類(和抽象方法)的子類。

舉個例子,泡茶和泡咖啡有同樣的步驟,比如燒開水(boilwater)、沖泡(brew)、倒在杯子裡(pouroncup),加小料(addcondiments)等等。但每種飲料沖泡的方法以及所加的小料不一樣,所以我們可以利用模板方法實現這個主要步驟。

首先先來定義抽象步驟:

var caffeinebeverage = function () ;

caffeinebeverage.prototype.preparerecipe = function ()

};caffeinebeverage.prototype.boilwater = function () ;

caffeinebeverage.prototype.pouroncup = function () ;

caffeinebeverage.prototype.brew = function () ;

caffeinebeverage.prototype.addcondiments = function () ;

// 預設加上小料

caffeinebeverage.prototype.customerwantscondiments = function () ;

該函式在原型上擴充套件了所有的基礎步驟,以及主要步驟,沖泡和加小料步驟沒有實現,供具體飲料所對應的函式來實現,另外是否加小料(customerwantscondiments )預設返回 true,子函式重寫的時候可以重寫該值。

下面兩個函式分別是衝咖啡和沖茶所對應的函式:

// 衝咖啡

var coffee = function () ;

coffee.prototype = new caffeinebeverage();

coffee.prototype.brew = function () ;

coffee.prototype.addcondiments = function () ;

coffee.prototype.customerwantscondiments = function () ;

//衝茶葉

var tea = function () ;

tea.prototype = new caffeinebeverage();

tea.prototype.brew = function () ;

tea.prototype.addcondiments = function () ;

tea.prototype.customerwantscondiments = function () ;

另外使用 confirm,可以讓使用者自己選擇加不加小料,很不錯,不是嘛?

模板方法應用於下列情況:

一次性實現乙個演算法的不變的部分,並將可變的行為留給子類來實現

各子類中公共的行為應被提取出來並集中到乙個公共父類中的避免**重複,不同之處分離為新的操作,最後,用乙個釣魚這些新操作的模板方法來替換這些不同的**

控制子類擴充套件,模板方法只在特定點呼叫「hook」操作,這樣就允許在這些點進行擴充套件

和策略模式不同,模板方法使用繼承來改變演算法的一部分,而策略模式使用委託來改變整個演算法。

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

父類抽象出子類共有的方法,子類實現各自不同的業務。總之就是一種行為有他們共同的方法,只是他們具體的實現不一樣。比如開車這種行為模式,啟動 換擋 踩油門。每種型號品牌的車都有共同的行為,但是不同型號品牌的車的實現方式可能不同,需要每個品牌型號的車自己實現這些功能。這樣的定義上面行為的模式,稱之為模板方...

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

模板方法模式,也是我們經常會在不經意間有會用到的模式之一。這個模式是對繼承的最好詮釋。當子類中有重複的動作時,將他們提取出來,放在父類中進行統一的處理,這就是模板方法模式的最簡單通俗的解釋。就像我們平時做專案,每次的專案流程實都差不多,都有調研 開發 測試 部署上線等流程。而具體到每個專案中,這些流...

設計模式之模板方法模式

定義 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變演算法的結構即可重定義該演算法中的某些特定步驟 型別 行為類模式 事實上,模板方法是程式設計中乙個經常用到的模式。比如,給定乙個整數陣列,把陣列中的數由大到小順序,然後把排序之後的結果列印出來。這個需求大體可以分為兩部分,...