欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、定義

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

二、示例

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

/* 抽象父類:飲料 */
var Beverage = function(){};
// (1) 把水煮沸
Beverage.prototype.boilWater = function() {
  console.log("把水煮沸");
};
// (2) 沸水浸泡
Beverage.prototype.brew = function() {
  throw new Error("子類必須重寫brew方法");
};
// (3) 倒進杯子
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();
}

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

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

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

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

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

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

典型使用場景:

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

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

相關(guān)文章

  • IE與FireFox的JavaScript兼容問題解決辦法

    IE與FireFox的JavaScript兼容問題解決辦法

    本篇文章主要是對IE與FireFox的JavaScript兼容問題解決辦法進行了詳細的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • 關(guān)于javaScript注冊click事件傳遞參數(shù)的不成功問題

    關(guān)于javaScript注冊click事件傳遞參數(shù)的不成功問題

    在javaScript中給一個html元素注冊click事件處理函數(shù)時,比如給該處理函數(shù)傳3個參數(shù)??墒遣还苁鞘褂孟旅婺欠N方式都不能給事件處理函數(shù)傳遞參數(shù)
    2014-07-07
  • Span元素的width屬性無效果原因及解決方案

    Span元素的width屬性無效果原因及解決方案

    Span元素的width屬性無效果原因及解決方案
    2010-01-01
  • JSON字符串操作移除空串更改key/value的介紹

    JSON字符串操作移除空串更改key/value的介紹

    今天小編就為大家分享一篇關(guān)于JSON字符串操作移除空串更改key/value的介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 今天是星期幾的4種JS代碼寫法

    今天是星期幾的4種JS代碼寫法

    這篇文章介紹了今天是星期幾的4種JS代碼寫法,有需要的朋友可以參考一下
    2013-09-09
  • 基于javascript實現(xiàn)最簡單選項卡切換

    基于javascript實現(xiàn)最簡單選項卡切換

    這篇文章主要為大家詳細介紹了基于javascript實現(xiàn)最簡單選項卡切換,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • JavaScript隨機生成信用卡卡號的方法

    JavaScript隨機生成信用卡卡號的方法

    這篇文章主要介紹了JavaScript隨機生成信用卡卡號的方法,涉及javascript操作隨機隨機數(shù)生成信用卡卡號的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • jsonp的簡單介紹以及其安全風險

    jsonp的簡單介紹以及其安全風險

    JSONP原理就是動態(tài)插入帶有跨域url的script標簽,然后調(diào)用回調(diào)函數(shù),把我們需要的json數(shù)據(jù)作為參數(shù)傳入,通過一些邏輯把數(shù)據(jù)顯示在頁面上,這篇文章主要給大家介紹了關(guān)于jsonp的簡單介紹以及其安全風險的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • uni-app中px與rpx的轉(zhuǎn)換方法

    uni-app中px與rpx的轉(zhuǎn)換方法

    這篇文章主要給大家介紹了關(guān)于uni-app中px與rpx的轉(zhuǎn)換方法,rpx單位最初由微信推出,它與我們常用px一個很大的區(qū)別就是具有響應(yīng)式,需要的朋友可以參考下
    2023-10-10
  • javascript十六進制數(shù)字和ASCII字符之間的轉(zhuǎn)換方法

    javascript十六進制數(shù)字和ASCII字符之間的轉(zhuǎn)換方法

    下面小編就為大家?guī)硪黄猨avascript十六進制數(shù)字和ASCII字符之間的轉(zhuǎn)換方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12

最新評論