成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

張遷 / 489人閱讀

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

模板方法模式

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

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

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

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

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

實(shí)現(xiàn)類用來(lái)實(shí)現(xiàn)細(xì)節(jié)。抽象類中的模版方法正是通過(guò)實(shí)現(xiàn)類擴(kuò)展的方法來(lái)完成業(yè)務(wù)邏輯。

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

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

2.便于維護(hù)。對(duì)于模版方法模式來(lái)說(shuō),正是由于他們的主要邏輯相同,才使用了模版方法。

適用場(chǎng)景

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

代碼
//模板方法

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)不檢測(cè)速度");
    };
    this.check = _check;
  }
})();
function Porsche911() {
  this.__proto__ = new AbstractCheck();
  this.startup = function () {
    console.log("檢測(cè)911啟動(dòng)");
  };
  this.speeup = function () {
    console.log("檢測(cè)911加速");
  };
  this.brake = function () {
    console.log("檢測(cè)911剎車");
    //檢測(cè)方法標(biāo)準(zhǔn)
    console.log("911剎車合格");
  };
  this.stop = function () {
    console.log("檢測(cè)911熄火");
  }
}
function Porsche781() {
  this.__proto__ = new AbstractCheck();
  this.startup = function () {
    console.log("檢測(cè)781啟動(dòng)");
  };
  this.speeup = function () {
    console.log("檢測(cè)781加速");
  };
  this.brake = function () {
    console.log("檢測(cè)781剎車");
    //檢測(cè)方法標(biāo)準(zhǔn)
    console.log("781剎車合格");
  };
  this.stop = function () {
    console.log("檢測(cè)781熄火");
  };
  this.checkspeed = function () {
    console.log("檢測(cè)781速度");
  };
}

var porsche911 = new Porsche911();
var porsche781 = new Porsche781();

porsche911.check();
porsche781.check();

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/79483.html

相關(guān)文章

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

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

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

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

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

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

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

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

    dingding199389 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<