模板方法模式和職責鏈模式

2021-10-02 08:41:19 字數 2004 閱讀 2067

一、模板方法模式

1、模板方法模式,基於繼承的設計模式,由兩部分組成,抽象父類和具體實現子類。

2、例子coffe 和 tea

//建立抽象類 -- 飲料

function beverage(){}

beverage.prototype.boilwater = function()

//抽象的父類方法,具體實現由子類來寫

beverage.prototype.brew = function(){} //泡

beverage.prototype.pourincup = function(){} //飲料倒進杯子

beverage.prototype.addcond = function(){} //加調料

beverage.prototype.init = function()

//建立具體子類 coffee and tea

var coffee = function (){};

coffee.prototype = new beverage();

coffee.prototype.brew = function ()

coffee.prototype.brew = function ()

coffee.prototype.brew = function ()

var coffee = new coffee();

coffee.init();

var tea = function(){};

tea.prototype = new beverage();

tea.prototype.brew = function ()

tea.prototype.brew = function ()

tea.prototype.brew = function ()

var tea= new tea();

tea.init();

beverage.prototype.init 被稱為模板方法的原因是:該方法封裝了子類的演算法框架,作為演算法模板,指導子類以何種順序去執行方法。​​抽象方法沒有具體的實現過程,是一些啞方法,當子類繼承這個抽象類,必須重寫父類的抽象方法。如果子類忘記實現父類中的抽象方法?

beverage.prototype.brew = function ()
二、職責鏈模式

2、購物付定金例子

//舊版 order

//ordertype 預付定金型別,code為1 500元定金 code為2 200元定金 code為3 普通使用者

//pay 是否已經支付過定金

//stock 當前用於普通購買客戶的手機記憶體數量

var order = function (ordertype, pay, stock) else else }}

if (ordertype === 2) else else }}

if (ordertype === 3) else }}

//重構

var order500 = function(ordertype, pay, stock)else

}var order500 = function(ordertype, pay, stock)else

}var order200 = function(ordertype, pay, stock)else

}var ordernormal = function(ordertype, pay, stock) else

}

大函式拆分成3個小函式,去掉了許多巢狀的條件分支語句。

但是耦合嚴重,order500和order200耦合在一起,違反開放-封閉原則;

職責鏈模式

1.職責鏈 namespace dutychainpattern 用來處理請求 public abstract void transmitrequest int request 班主任 職責鏈上的乙個節點,在裡面進行判斷,看能否處理請求,不能則將請求轉移 public class classadvi...

職責鏈模式

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...

職責鏈模式

劇情簡要 學習此模式,讓筆者聯想到自然界的生物鏈。打個比方 大魚吃小魚,小魚吃蝦公尺。河裡的小蝦公尺問大魚,你要不要吃我啊?大魚說 你太小了,吃了 沒吃,return 懶得吃!然後蝦公尺又問小魚 小螃蟹 小河馬同樣的問題。其實如果小蝦公尺這麼想自我了結的話,根本不用這麼費勁。這就開始了我們職責鏈模式...