亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

深入理解JavaScript系列(41):設計模式之模板方法詳解

2019-11-20 13:01:35
字體:
來源:轉載
供稿:網友

介紹

模板方法(TemplateMethod)定義了一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

模板方法是一種代碼復用的基本技術,在類庫中尤為重要,因為他們提取了類庫中的公共行為。模板方法導致一種反向的控制結構,這種結構就是傳說中的“好萊塢法則”,即“別找找我們,我們找你”,這指的是父類調用一個類的操作,而不是相反。具體體現是面向對象編程編程語言里的抽象類(以及其中的抽象方法),以及繼承該抽象類(和抽象方法)的子類。

正文

舉個例子,泡茶和泡咖啡有同樣的步驟,比如燒開水(boilWater)、沖泡(brew)、倒在杯子里(pourOnCup),加小料(addCondiments)等等。但每種飲料沖泡的方法以及所加的小料不一樣,所以我們可以利用模板方法實現這個主要步驟。

首先先來定義抽象步驟:

復制代碼 代碼如下:

var CaffeineBeverage = function () {

};
CaffeineBeverage.prototype.prepareRecipe = function () {
    this.boilWater();
    this.brew();
    this.pourOnCup();
    if (this.customerWantsCondiments()) {
        // 如果可以想加小料,就加上
 this.addCondiments();
    }
};
CaffeineBeverage.prototype.boilWater = function () {
    console.log("將水燒開!");
};
CaffeineBeverage.prototype.pourOnCup = function () {
    console.log("將飲料到再杯子里!");
};
CaffeineBeverage.prototype.brew = function () {
    throw new Error("該方法必須重寫!");
};
CaffeineBeverage.prototype.addCondiments = function () {
    throw new Error("該方法必須重寫!");
};
// 默認加上小料
CaffeineBeverage.prototype.customerWantsCondiments = function () {
    return true;
};

該函數在原型上擴展了所有的基礎步驟,以及主要步驟,沖泡和加小料步驟沒有實現,供具體飲料所對應的函數來實現,另外是否加小料(customerWantsCondiments )默認返回true,子函數重寫的時候可以重寫該值。

下面兩個函數分別是沖咖啡和沖茶所對應的函數:

復制代碼 代碼如下:

// 沖咖啡
var Coffee = function () {
    CaffeineBeverage.apply(this);
};
Coffee.prototype = new CaffeineBeverage();
Coffee.prototype.brew = function () {
    console.log("從咖啡機想咖啡倒進去!");
};
Coffee.prototype.addCondiments = function () {
    console.log("添加糖和牛奶");
};
Coffee.prototype.customerWantsCondiments = function () {
    return confirm("你想添加糖和牛奶嗎?");
};

//沖茶葉
var Tea = function () {
    CaffeineBeverage.apply(this);
};
Tea.prototype = new CaffeineBeverage();
Tea.prototype.brew = function () {
    console.log("泡茶葉!");
};
Tea.prototype.addCondiments = function () {
    console.log("添加檸檬!");
};
Tea.prototype.customerWantsCondiments = function () {
    return confirm("你想添加檸檬嘛?");
};


另外使用confirm,可以讓用戶自己選擇加不加小料,很不錯,不是嘛?

總結

模板方法應用于下列情況:

1.一次性實現一個算法的不變的部分,并將可變的行為留給子類來實現
2.各子類中公共的行為應被提取出來并集中到一個公共父類中的避免代碼重復,不同之處分離為新的操作,最后,用一個釣魚這些新操作的模板方法來替換這些不同的代碼
3.控制子類擴展,模板方法只在特定點調用“hook”操作,這樣就允許在這些點進行擴展

和策略模式不同,模板方法使用繼承來改變算法的一部分,而策略模式使用委托來改變整個算法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
少妇高潮久久久久久潘金莲| 亚洲视频999| 欧美夜福利tv在线| 国产精选久久久久久| 91久久嫩草影院一区二区| 日韩av电影在线网| 亚洲无线码在线一区观看| 美女精品视频一区| 国产suv精品一区二区| 国产一区二区精品丝袜| 91欧美日韩一区| 欧美xxxwww| 亚洲丁香婷深爱综合| 色偷偷88888欧美精品久久久| 九九热这里只有精品6| 2020欧美日韩在线视频| 精品久久久久久中文字幕一区奶水| 国产精品色视频| 国产精品视频免费观看www| 日韩欧美成人免费视频| 国产一区二区在线免费视频| 亚洲乱码国产乱码精品精天堂| 18性欧美xxxⅹ性满足| 亚洲人成网站在线播| 亚洲第一福利在线观看| 最新国产成人av网站网址麻豆| 伦伦影院午夜日韩欧美限制| 久久久爽爽爽美女图片| 色婷婷久久av| 亚洲图片欧美午夜| 成人h视频在线| 日韩美女av在线免费观看| 92福利视频午夜1000合集在线观看| 国产精品永久免费视频| 国产成人av在线| 福利微拍一区二区| 精品毛片三在线观看| 日韩在线观看电影| 黑人狂躁日本妞一区二区三区| 欧美激情亚洲国产| 黄色成人av网| 久久精品青青大伊人av| 成人免费午夜电影| 亚洲男人天堂网站| 欧美亚洲国产视频小说| 欧美小视频在线| 国产欧美精品va在线观看| 国产精品久久网| 国自产精品手机在线观看视频| 欧美黑人xxx| 国产欧美日韩91| 国产精品视频公开费视频| 国产精品久久久久久久app| 日韩在线免费av| 亚洲新声在线观看| 亚洲资源在线看| 国产日产欧美a一级在线| 欧美色视频日本版| 91久久综合亚洲鲁鲁五月天| 日本一区二区不卡| 日韩三级影视基地| 欧美成人剧情片在线观看| 成人欧美一区二区三区在线| 亚洲偷熟乱区亚洲香蕉av| 91av在线精品| 国产精品久久久久久影视| 欧美日本在线视频中文字字幕| 成人免费淫片aa视频免费| 不卡av电影在线观看| 亚洲午夜精品久久久久久久久久久久| 深夜福利亚洲导航| 中文字幕欧美国内| 亚洲一区二区三区视频| 欧美在线免费视频| 精品国产1区2区| 日韩av在线播放资源| 欧美成在线观看| 亚洲欧美日韩图片| 国产精品成人久久久久| 国产在线拍揄自揄视频不卡99| 亚洲欧美一区二区三区情侣bbw| 91嫩草在线视频| 日韩在线播放一区| 国产精品一区二区性色av| 2019中文字幕在线免费观看| 另类色图亚洲色图| 国产精品爽爽爽| 国产精品一区二区久久久久| 亚洲精品欧美一区二区三区| 久久激情五月丁香伊人| 日韩av高清不卡| 欧美性猛交99久久久久99按摩| 日韩激情第一页| 欧美日韩国产精品一区| 欧美精品做受xxx性少妇| 国产精品久久婷婷六月丁香| 91色中文字幕| 国产在线观看不卡| 亚洲va久久久噜噜噜| www.99久久热国产日韩欧美.com| 欧美精品一区在线播放| 国产日韩欧美另类| 亚洲伊人久久综合| 国产精品视频永久免费播放| 97avcom| 日韩欧美精品在线观看| 亚洲欧洲在线视频| 97视频在线观看亚洲| 久久色免费在线视频| 亚洲精品一区二区三区婷婷月| 亚洲欧美三级伦理| 91在线观看免费高清完整版在线观看| 91九色视频导航| 亚洲欧洲美洲在线综合| 亚洲国产精品999| 国产91色在线免费| 国产日韩欧美成人| 美女久久久久久久| 国产精品激情av在线播放| 欧美性20hd另类| 久久91精品国产| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲丁香久久久| 欧美视频在线视频| 亚洲一区二区自拍| 国产精品r级在线| 精品一区二区三区电影| 久久久在线免费观看| 日本不卡高字幕在线2019| 国产精品福利片| 欧美中文字幕视频| 久久91精品国产91久久久| 日本免费久久高清视频| 国产精品色悠悠| 伊人久久大香线蕉av一区二区| 国产精品美女主播在线观看纯欲| 久久精品一偷一偷国产| 欧美激情在线有限公司| 午夜精品久久久久久久99热浪潮| 青青草原成人在线视频| 欧美专区第一页| 欧美黑人极品猛少妇色xxxxx| 国产精品久久久久久久7电影| 欧美一区二区三区艳史| 国产精品香蕉国产| 日韩av大片在线| 日本久久久久亚洲中字幕| 亚洲精品一区二区在线| 日韩免费在线免费观看| 尤物九九久久国产精品的分类| 欧美人与物videos| 亚洲精品二三区| 欧美国产日韩免费| 亚洲欧洲激情在线| 久久中文字幕在线视频| 亚洲小视频在线观看| 亚洲电影第1页| 一区二区三区 在线观看视| 91高清视频免费| 国产欧美va欧美va香蕉在| 色哟哟网站入口亚洲精品| 久久伊人色综合| 精品国内产的精品视频在线观看| 国产精品扒开腿做爽爽爽视频|