最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

學(xué)習(xí)JavaScript設(shè)計(jì)模式之模板方法模式

 更新時(shí)間:2016年01月20日 11:43:14   作者:奮飛  
這篇文章主要為大家介紹了JavaScript設(shè)計(jì)模式中的模板方法模式,對(duì)JavaScript設(shè)計(jì)模式感興趣的小伙伴們可以參考一下

一、定義

模板方法是基于繼承的設(shè)計(jì)模式,可以很好的提高系統(tǒng)的擴(kuò)展性。 java中的抽象父類、子類
模板方法有兩部分結(jié)構(gòu)組成,第一部分是抽象父類,第二部分是具體的實(shí)現(xiàn)子類。

二、示例

Coffee or Tea
(1) 把水煮沸
(2) 用沸水浸泡茶葉
(3) 把茶水倒進(jìn)杯子
(4) 加檸檬

/* 抽象父類:飲料 */
var Beverage = function(){};
// (1) 把水煮沸
Beverage.prototype.boilWater = function() {
  console.log("把水煮沸");
};
// (2) 沸水浸泡
Beverage.prototype.brew = function() {
  throw new Error("子類必須重寫brew方法");
};
// (3) 倒進(jìn)杯子
Beverage.prototype.pourInCup = function() {
  throw new Error("子類必須重寫pourInCup方法");
};
// (4) 加調(diào)料
Beverage.prototype.addCondiments = function() {
  throw new Error("子類必須重寫addCondiments方法");
};

/* 模板方法 */
Beverage.prototype.init = function() {
  this.boilWater();
  this.brew();
  this.pourInCup();
  this.addCondiments();
}

/* 實(shí)現(xiàn)子類 Coffee*/
var Coffee = function(){};
Coffee.prototype = new Beverage();
// 重寫非公有方法
Coffee.prototype.brew = function() {
  console.log("用沸水沖泡咖啡");
};
Coffee.prototype.pourInCup = function() {
  console.log("把咖啡倒進(jìn)杯子");
};
Coffee.prototype.addCondiments = function() {
  console.log("加牛奶");
};
var coffee = new Coffee();
coffee.init();

通過模板方法模式,在父類中封裝了子類的算法框架。這些算法框架在正常狀態(tài)下是適用大多數(shù)子類的,但也會(huì)出現(xiàn)“個(gè)性”子類。
如上述流程,加調(diào)料是可選的。
鉤子方法可以解決這個(gè)問題,放置鉤子是隔離變化的一種常見手段。

/* 添加鉤子方法 */
Beverage.prototype.customerWantsCondiments = function() {
  return true;
};
Beverage.prototype.init = function() {
  this.boilWater();
  this.brew();
  this.pourInCup();
  if(this.customerWantsCondiments()) {
    this.addCondiments();
  }
}

/* 實(shí)現(xiàn)子類 Tea*/
var Tea = function(){};
Tea.prototype = new Beverage();
// 重寫非公有方法
Tea.prototype.brew = function() {
  console.log("用沸水沖泡茶");
};
Tea.prototype.pourInCup = function() {
  console.log("把茶倒進(jìn)杯子");
};
Tea.prototype.addCondiments = function() {
  console.log("加牛奶");
};
Tea.prototype.customerWantsCondiments = function() {
  return window.confirm("需要添加調(diào)料嗎?");
};
var tea = new Tea();
tea.init();

JavaScript沒有提供真正的類式繼承,繼承是通過對(duì)象與對(duì)象之間的委托來實(shí)現(xiàn)的。

三、“好萊塢原則”:別調(diào)用我們,我們會(huì)調(diào)用你

典型使用場景:

(1)模板方法模式:使用該設(shè)計(jì)模式意味著子類放棄了對(duì)自己的控制權(quán),而是改為父類通知子類。作為子類,只負(fù)責(zé)提供一些設(shè)計(jì)上的細(xì)節(jié)。
(2)觀察者模式:發(fā)布者把消息推送給訂閱者。
(3)回調(diào)函數(shù):ajax異步請(qǐng)求,把需要執(zhí)行的操作封裝在回調(diào)函數(shù)里,當(dāng)數(shù)據(jù)返回后,這個(gè)回調(diào)函數(shù)才被執(zhí)行。

希望本文所述對(duì)大家學(xué)習(xí)javascript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • layui在form表單頁面通過Validform加入簡單驗(yàn)證的方法

    layui在form表單頁面通過Validform加入簡單驗(yàn)證的方法

    今天小編就為大家分享一篇layui在form表單頁面通過Validform加入簡單驗(yàn)證的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JS PHP字符串截取函數(shù)實(shí)現(xiàn)原理解析

    JS PHP字符串截取函數(shù)實(shí)現(xiàn)原理解析

    這篇文章主要介紹了JS PHP字符串截取函數(shù)實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java設(shè)計(jì)中的Builder模式的介紹

    Java設(shè)計(jì)中的Builder模式的介紹

    這篇文章主要介紹了從一個(gè)Person例子進(jìn)行分析重疊構(gòu)造器模式、Builder模式的使用場景以及運(yùn)用JavaBeans模式彌補(bǔ)重疊構(gòu)造器模式的不足
    2018-03-03
  • 如何使用JavaScript計(jì)算SHA-256?hash值詳解

    如何使用JavaScript計(jì)算SHA-256?hash值詳解

    SHA-256是一種常用的散列函數(shù),廣泛應(yīng)用于多種安全程序和協(xié)議中,如TLS、SSL、SSH、PGP和比特幣等,在JavaScript中,可以通過原生API輕松計(jì)算SHA-256的hash值,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • Javascript實(shí)現(xiàn)秒表倒計(jì)時(shí)功能

    Javascript實(shí)現(xiàn)秒表倒計(jì)時(shí)功能

    這篇文章主要為大家詳細(xì)介紹了Javascript實(shí)現(xiàn)秒表倒計(jì)時(shí)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • input 標(biāo)簽實(shí)現(xiàn)輸入框帶提示文字效果(兩種方法)

    input 標(biāo)簽實(shí)現(xiàn)輸入框帶提示文字效果(兩種方法)

    這篇文章主要介紹了input 標(biāo)簽實(shí)現(xiàn)輸入框帶提示文字效果(兩種方法),需要的朋友可以參考下
    2017-10-10
  • js中toString方法3個(gè)作用

    js中toString方法3個(gè)作用

    這篇文章主要給大家分享了js中toString方法的3個(gè)作用,文章圍繞js中toString方法的相關(guān)資料展開全文內(nèi)容,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2021-12-12
  • uni-app表單組件(form表單)用法舉例

    uni-app表單組件(form表單)用法舉例

    平時(shí)我們經(jīng)常會(huì)使用到表單,下面這篇文章主要給大家介紹了關(guān)于uni-app表單組件(form表單)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • javascript的var與let,const之間的區(qū)別詳解

    javascript的var與let,const之間的區(qū)別詳解

    這篇文章主要為大家介紹了?javascript的var與let,const之間的區(qū)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • bootstrap 模態(tài)框(modal)實(shí)現(xiàn)水平垂直居中顯示

    bootstrap 模態(tài)框(modal)實(shí)現(xiàn)水平垂直居中顯示

    這篇文章主要為大家詳細(xì)介紹了bootstrap 模態(tài)框modal實(shí)現(xiàn)水平垂直居中顯示,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01

最新評(píng)論

高碑店市| 合川市| 咸阳市| 剑阁县| 纳雍县| 松阳县| 色达县| 黄大仙区| 辽源市| 渭南市| 平陆县| 永济市| 潜江市| 伽师县| 道真| 博罗县| 甘孜| 永清县| 定南县| 长海县| 吴堡县| 石林| 六枝特区| 辽源市| 盘锦市| 定远县| 泽普县| 新安县| 昌平区| 聊城市| 济源市| 财经| 利辛县| 延安市| 同德县| 婺源县| 石林| 林西县| 阿荣旗| 乐业县| 荔浦县|