JavaScript設計模式九(模板方法模式)

2021-08-19 10:39:49 字數 2730 閱讀 9141

定義:

模板方法模式是一種只需要使用繼承就可以實現的非常簡單的模式

模板方法模式由兩部分組成,第一部分是抽象父類,另一部分是具體的實現子類。通常抽象父類中封裝了子類的演算法框架,包括實現一些公共的方法以及封裝子類中所有方法的執行順序。子類通過繼承這個類,然後繼承了這個演算法,然後重寫父類的方法

例子是泡一杯咖啡和茶

對於咖啡的順序:

**實現:

var coffee = function

(){};

coffee.prototype.boilwater = function

();coffee.prototype.brewcoffee = function

();coffee.prototype.pourincup = function

();coffee.prototype.addsugarandmilk = function

() ;

coffee.prototype.init = function

();var coffee = new coffee();

coffee.init();

然後我們看泡一壺茶:

var tea = function

(){};

tea.prototype.boilwater = function

() tea.prototype.steepteabag = function

() tea.prototype.pourincup = function

() tea.prototype.addlimo = function

() tea.protype.init = function

()var tea = new tea();

tea.init();

我們看這兩個是不是有很多共同點?抽離下,基本是4個步驟:

**如下:

var beverage = function

(){};

beverage.prototype.boilwater = function

() ;

beverage.prototype.brew = function

(){};

beverage.prototype.pourincup = function

() {};

beverage.prototype.addcondiments = function

(){};

beverage.prototype.init = function

() ;

但是這個類在現實來說,是沒有啥意義的,我們可以讓coffee, tea繼承於beverage

var coffee = function

(){};

coffee.prototype = new beverage();

coffee.prototype.brew = function

()coffee.prototype.pourincup = function

() coffee.prototype.addcondiments = function

() var coffee = new coffee();

coffee.init();

這樣一杯咖啡就完成了,茶也可以用類似的方法來實現,我們本章說的是模板方法,那麼什麼是模板方法呢?就是beverage.prototype.init方法,這個方法中封裝了子類的演算法框架,作為演算法的模板,指導子類以何種方法和順序去執行方法

通過模板方法,我們在父類中封裝了子類的演算法框架,這些正常情況下是適用的,但是總是有特殊情況,例如有些喝咖啡的人不要加糖,利用鉤子就可以實現

var beverage = function

(){};

beverage.prototype.boilwater = function

();beverage.prototype.brew = function

();beverage.prototype.pourincup = function

();beverage.prototype.addcondiments = function

();beverage.prototype.customerwantscondiments = function

();beverage.prototype.init = function

() };

// 如果掛鉤返回 true,則需要調料

var coffeewithhook = function

(){};

coffeewithhook.prototype = new beverage();

coffeewithhook.prototype.brew = function

();coffeewithhook.prototype.pourincup = function

();coffeewithhook.prototype.addcondiments = function

();coffeewithhook.prototype.customerwantscondiments = function

();var coffeewithhook = new coffeewithhook();

coffeewithhook.init();

JavaScript設計模式

js類設計模式一 類建構函式 function myclass 定義公共屬性 myclass.prototype 定義公共方法 myclass.prototype.methoda function myclass.prototype.methodb function 呼叫 var objclass ...

JavaScript 設計模式

1 單例模式 singleton pattern 單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項 單例模式會阻止其他物件例項化其自己的單例物件的副本,從而確保所有物件都訪問唯一例項。因為類控制了...

JavaScript設計模式

設計模式是什麼?設計模式就是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。為什麼要使用設計模式?設計模式可重用 讓 更容易被他人理解 保證 可靠性,設計模式使 編制真正工程化。設計模式怎麼來的?設計模式概念是由四人幫 設計模式 可復用物件導向軟體的基礎 的四位作者 提出,總共分成了三...