摘要:模版方法由抽象類聲明并加以實現。抽象類中的模版方法正是通過實現類擴展的方法來完成業務邏輯。一般來說,抽象類中的模版方法是不易反生改變的部分,而抽象方法是容易反生變化的部分,因此通過增加實現類一般可以很容易實現功能的擴展,符合開閉原則。
模板方法模式
定義一個操作中算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變算法的結構即可重定義該算法中的某些特定步驟。
模板方法模式是編程中經常用到的模式,其非常簡單,AbstractClass叫抽象模板,其方法分為3類:
1.抽象方法:父類中只聲明但不加以實現,而是定義好規范,然后由它的子類去實現。
2.模版方法:由抽象類聲明并加以實現。一般來說,模版方法調用抽象方法來完成主要的邏輯功能,并且,模版方法大多會定義為final類型,指明主要的邏輯功能在子類中不能被重寫。
3.鉤子方法:由抽象類聲明并加以實現。但是子類可以去擴展,子類可以通過擴展鉤子方法來影響模版方法的邏輯。
實現類用來實現細節。抽象類中的模版方法正是通過實現類擴展的方法來完成業務邏輯。
模板方法模式優點1.容易擴展。一般來說,抽象類中的模版方法是不易反生改變的部分,而抽象方法是容易反生變化的部分,因此通過增加實現類一般可以很容易實現功能的擴展,符合開閉原則。
2.便于維護。對于模版方法模式來說,正是由于他們的主要邏輯相同,才使用了模版方法。
適用場景在多個子類擁有相同的方法,并且這些方法邏輯相同時,可以考慮使用模版方法模式。在程序的主框架相同,細節不同的場合下,也比較適合使用這種模式。
代碼//模板方法 var DP = require("./DesignPattern.js"); var AbstractCheck = (function () { _check = function () { this.startup(); this.speeup(); this.checkspeed(); this.brake(); this.stop(); } return function AbstractCheck() { DP.Interface(this, ["startup", "speeup", "brake", "stop"]); this.checkspeed = function () { console.log("默認不檢測速度"); }; this.check = _check; } })(); function Porsche911() { this.__proto__ = new AbstractCheck(); this.startup = function () { console.log("檢測911啟動"); }; this.speeup = function () { console.log("檢測911加速"); }; this.brake = function () { console.log("檢測911剎車"); //檢測方法標準 console.log("911剎車合格"); }; this.stop = function () { console.log("檢測911熄火"); } } function Porsche781() { this.__proto__ = new AbstractCheck(); this.startup = function () { console.log("檢測781啟動"); }; this.speeup = function () { console.log("檢測781加速"); }; this.brake = function () { console.log("檢測781剎車"); //檢測方法標準 console.log("781剎車合格"); }; this.stop = function () { console.log("檢測781熄火"); }; this.checkspeed = function () { console.log("檢測781速度"); }; } var porsche911 = new Porsche911(); var porsche781 = new Porsche781(); porsche911.check(); porsche781.check();
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/79483.html
摘要:讓一切變得更簡單抽象化深入封裝算法塊,這便是設計模式當中的一種模式模板方法模式。定義模板方法模式在一個方法中定義一個算法的框架,而將一些步驟延遲到子類中。 讓一切變得更簡單抽象化 深入封裝算法塊,這便是設計模式當中的一種模式:模板方法模式。 我們先來看看下面兩個茶和咖啡配方showImg(https://segmentfault.com/img/bVV4kS?w=1248&h=...
摘要:面向對象三大特征繼承性多態性封裝性接口。第五階段封裝一個屬于自己的框架框架封裝基礎事件流冒泡捕獲事件對象事件框架選擇框架。核心模塊和對象全局對象,,,事件驅動,事件發射器加密解密,路徑操作,序列化和反序列化文件流操作服務端與客戶端。 第一階段: HTML+CSS:HTML進階、CSS進階、div+css布局、HTML+css整站開發、 JavaScript基礎:Js基礎教程、js內置對...
摘要:面向對象三大特征繼承性多態性封裝性接口。第五階段封裝一個屬于自己的框架框架封裝基礎事件流冒泡捕獲事件對象事件框架選擇框架。核心模塊和對象全局對象,,,事件驅動,事件發射器加密解密,路徑操作,序列化和反序列化文件流操作服務端與客戶端。 第一階段: HTML+CSS:HTML進階、CSS進階、div+css布局、HTML+css整站開發、 JavaScript基礎:Js基礎教程、js內置對...
摘要:本文首發于的技術博客實用至上,非經作者同意,請勿轉載。如果你使用了,或類似的,那么,通過編譯前后的代碼相差就很大了,這會造成兩個問題以為例把你的代碼轉成什么樣你自己是無法控制的,這往往導致無法通過的審查。 本文首發于Array_Huang的技術博客——實用至上,非經作者同意,請勿轉載。原文地址:https://segmentfault.com/a/1190000007030775如果您...
閱讀 2894·2021-11-24 09:38
閱讀 3518·2021-11-23 09:51
閱讀 987·2021-09-09 11:52
閱讀 4039·2021-08-11 11:18
閱讀 1115·2019-08-30 14:05
閱讀 3235·2019-08-30 11:23
閱讀 1773·2019-08-29 17:02
閱讀 1132·2019-08-26 13:49