設計模式到處透漏者前輩們的指揮, 在衆多設計模式中模版設計模式是軟件設計中最經常使用, 最正統的模式, 也是本人最喜歡的模式, 其就像一顆顆螺絲釘到處體如今軟件設計和其餘模式中父類定義一個模板結構,將部分具體內容延遲到子類去實現javascript
在軟件系統設計中最經常使用的就是 接口--抽象類--類 三級設計模式, 以下圖
java
再此模式中接口定義了方法, 抽象類定義了算法的框架實現了一部分算法, 對象類則實現了剩餘的其餘方法(固然若有須要能夠靈活配置, 好比抽象類實現了一個默認的方法, 若有須要對象類能夠重寫這個方法)
算法
接口數據庫
let IEat = new Interface('IEat', ['eatDinner','buy','cook', 'eat'])
抽象類設計模式
let Eatdinner = function () { }; Eatdinner.prototype.buy = function () { throw new Error(); }; Eatdinner.prototype.cook = function () { throw new Error(); }; Eatdinner.prototype.eat = function () { console.log('吃'); }; Eatdinner.prototype.eatDinner = function () { this.buy(); this.cook(); this.eat(); };
對象類框架
let EatA = function () { Eatdinner.call(this); } extend(EatA, Eatdinner); EatA.prototype.buy = function () { console.log('蘿蔔'); } EatA.prototype.cook = function () { console.log('炒'); } let EatB = function () { Eatdinner.call(this); } extend(EatB, Eatdinner); EatB.prototype.buy = function () { console.log('蘿蔔'); } EatB.prototype.cook = function () { console.log('炸'); } let EatC = function () { Eatdinner.call(this); } extend(EatC, Eatdinner); EatC.prototype.buy = function () { console.log('青菜'); } EatC.prototype.cook = function () { console.log('烤'); }
模板模式的優勢數據庫設計
- 具體細節步驟實現定義在子類中,子類定義詳細處理算法是不會改變算法總體結構。
- 代碼複用的基本技術,在數據庫設計中尤其重要。
- 存在一種反向的控制結構,經過一個父類調用其子類的操做,經過子類對父類進行擴展增長新的行爲,符合「開閉原則」。