成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS 設(shè)計模式 九(模板模式)

張遷 / 452人閱讀

摘要:模版方法由抽象類聲明并加以實現(xiàn)。抽象類中的模版方法正是通過實現(xiàn)類擴展的方法來完成業(yè)務(wù)邏輯。一般來說,抽象類中的模版方法是不易反生改變的部分,而抽象方法是容易反生變化的部分,因此通過增加實現(xiàn)類一般可以很容易實現(xiàn)功能的擴展,符合開閉原則。

模板方法模式

定義一個操作中算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變算法的結(jié)構(gòu)即可重定義該算法中的某些特定步驟。

模板方法模式是編程中經(jīng)常用到的模式,其非常簡單,AbstractClass叫抽象模板,其方法分為3類:

1.抽象方法:父類中只聲明但不加以實現(xiàn),而是定義好規(guī)范,然后由它的子類去實現(xiàn)。

2.模版方法:由抽象類聲明并加以實現(xiàn)。一般來說,模版方法調(diào)用抽象方法來完成主要的邏輯功能,并且,模版方法大多會定義為final類型,指明主要的邏輯功能在子類中不能被重寫。

3.鉤子方法:由抽象類聲明并加以實現(xiàn)。但是子類可以去擴展,子類可以通過擴展鉤子方法來影響模版方法的邏輯。

實現(xiàn)類用來實現(xiàn)細節(jié)。抽象類中的模版方法正是通過實現(xiàn)類擴展的方法來完成業(yè)務(wù)邏輯。

模板方法模式優(yōu)點

1.容易擴展。一般來說,抽象類中的模版方法是不易反生改變的部分,而抽象方法是容易反生變化的部分,因此通過增加實現(xiàn)類一般可以很容易實現(xiàn)功能的擴展,符合開閉原則。

2.便于維護。對于模版方法模式來說,正是由于他們的主要邏輯相同,才使用了模版方法。

適用場景

在多個子類擁有相同的方法,并且這些方法邏輯相同時,可以考慮使用模版方法模式。在程序的主框架相同,細節(jié)不同的場合下,也比較適合使用這種模式。

代碼
//模板方法

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("默認(rèn)不檢測速度");
    };
    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剎車");
    //檢測方法標(biāo)準(zhǔn)
    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剎車");
    //檢測方法標(biāo)準(zhǔn)
    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();

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79483.html

相關(guān)文章

  • 開發(fā)之路(設(shè)計模式模板方法模式

    摘要:讓一切變得更簡單抽象化深入封裝算法塊,這便是設(shè)計模式當(dāng)中的一種模式模板方法模式。定義模板方法模式在一個方法中定義一個算法的框架,而將一些步驟延遲到子類中。 讓一切變得更簡單抽象化 深入封裝算法塊,這便是設(shè)計模式當(dāng)中的一種模式:模板方法模式。 我們先來看看下面兩個茶和咖啡配方showImg(https://segmentfault.com/img/bVV4kS?w=1248&h=...

    kgbook 評論0 收藏0
  • 大前端2018現(xiàn)在上車還還得及么

    摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對象事件框架選擇框架。核心模塊和對象全局對象,,,事件驅(qū)動,事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進階、CSS進階、div+css布局、HTML+css整站開發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對...

    stormgens 評論0 收藏0
  • 大前端2018現(xiàn)在上車還還得及么

    摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對象事件框架選擇框架。核心模塊和對象全局對象,,,事件驅(qū)動,事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進階、CSS進階、div+css布局、HTML+css整站開發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對...

    mylxsw 評論0 收藏0
  • webpack多頁應(yīng)用架構(gòu)系列():總有刁民想害朕!ESLint為你阻擊垃圾代碼

    摘要:本文首發(fā)于的技術(shù)博客實用至上,非經(jīng)作者同意,請勿轉(zhuǎn)載。如果你使用了,或類似的,那么,通過編譯前后的代碼相差就很大了,這會造成兩個問題以為例把你的代碼轉(zhuǎn)成什么樣你自己是無法控制的,這往往導(dǎo)致無法通過的審查。 本文首發(fā)于Array_Huang的技術(shù)博客——實用至上,非經(jīng)作者同意,請勿轉(zhuǎn)載。原文地址:https://segmentfault.com/a/1190000007030775如果您...

    dingding199389 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<