亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

javascript模板方法模式和職責鏈模式實例分析

瀏覽:2日期:2022-06-13 09:08:18
一、模板方法模式

1、模板方法模式,基于繼承的設計模式,由兩部分組成,抽象父類和具體實現子類。

2、例子Coffe 和 Tea

//創建抽象類 -- 飲料 function Beverage(){} Beverage.prototype.boilWater = function(){ console.log('把水煮沸') } //抽象的父類方法,具體實現由子類來寫 Beverage.prototype.brew = function(){} //泡 Beverage.prototype.pourIncup = function(){} //飲料倒進杯子 Beverage.prototype.addCond = function(){} //加調料 Beverage.prototype.init = function(){ this.boilWater(); this.brew(); this.pourIncup(); this.addCond(); } //創建具體子類 coffee and tea var Coffee = function (){}; Coffee.prototype = new Beverage(); Coffee.prototype.brew = function (){ console.log('用沸水沖泡咖啡') } Coffee.prototype.brew = function (){ console.log('把咖啡倒進杯子') } Coffee.prototype.brew = function (){ console.log('加糖和牛奶') } var coffee = new Coffee(); coffee.init(); var Tea = function(){}; Tea.prototype = new Beverage(); Tea.prototype.brew = function (){ console.log('用沸水沖泡茶') } Tea.prototype.brew = function (){ console.log('茶倒進杯子') } Tea.prototype.brew = function (){ console.log('加檸檬') } var tea= new Tea(); tea.init();

Beverage.prototype.init 被稱為模板方法的原因是:該方法封裝了子類的算法框架,作為算法模板,指導子類以何種順序去執行方法。

??抽象方法沒有具體的實現過程,是一些啞方法,當子類繼承這個抽象類,必須重寫父類的抽象方法。

如果子類忘記實現父類中的抽象方法?

Beverage.prototype.brew = function (){ throw new Error('子類必須重寫父類的brew方法')}二、職責鏈模式

1、職責鏈模式:弱化了發送(請求)-接收者之間的強聯系。

2、購物付定金例子

//舊版 order//orderType 預付定金類型,code為1 500元定金 code為2 200元定金 code為3 普通用戶//pay 是否已經支付過定金//stock 當前用于普通購買客戶的手機內存數量var order = function (orderType, pay, stock) { if (orderType === 1) {if (pay) { console.log('預付500定金并且已支付,得到100元優惠券')} else { //定金未支付,降到普通購買 if (stock > 0) {console.log('普通購買,無優惠券') } else {console.log('庫存不足'); }} } if (orderType === 2) {if (pay) { console.log('預付200定金并且已支付,得到50元優惠券')} else { //定金未支付,降到普通購買 if (stock > 0) {console.log('普通購買,無優惠券') } else {console.log('庫存不足'); }} } if (orderType === 3) {if (stock > 0) { console.log('普通購買,無優惠券')} else { console.log('庫存不足');} }}//重構var order500 = function(orderType, pay, stock){ if(orderType ===1 && pay){console.log('預付500定金并且已支付,得到100元優惠券') }else{order200(orderType, pay, stock) }}var order500 = function(orderType, pay, stock){ if(orderType ===1 && pay){console.log('預付500定金并且已支付,得到100元優惠券') }else{order200(orderType, pay, stock) }}var order200 = function(orderType, pay, stock){ if(orderType ===2 && pay){console.log('預付200定金并且已支付,得到50元優惠券') }else{orderNormal(orderType, pay, stock) }}var orderNormal = function(orderType, pay, stock){ if (stock > 0) { console.log('普通購買,無優惠券')} else { console.log('庫存不足');}}

大函數拆分成3個小函數,去掉了許多嵌套的條件分支語句。

但是耦合嚴重,order500和order200耦合在一起,違反開放-封閉原則;

更多設計模式相關知識點,還可以參考本站文章:

https://www.jb51.net/article/252965.htm

https://www.jb51.net/article/27973.htm

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 日韩国产免费一区二区三区 | 特级一级毛片视频免费观看 | 精品五夜婷香蕉国产线看观看 | 日本老妇人乱视频 | 亚瑟福利视频在线观看 | 拍拍在线观看免费播放 | 国产亚洲精品美女一区二区 | 黄黄网站| 三上悠亚先锋影音xfplay | 日韩国产成人 | 一区二区三区视频在线 | 在线碰碰视频在线观看 | 搞黄网站在线观看 | 欧美大吊视频 | 性福宝向日葵视频 | 国产日韩欧美三级 | 久久久久免费精品国产小说 | 好看的毛片 | 国产黄色免费观看 | 给我一个可以看片的www日本 | 一级一级一级毛片免费毛片 | 色接久久 | 国产一区中文字幕在线观看 | 久久日本精品99久久久 | 国产精品久久现线拍久青草 | 日韩在线视频网址 | 国内精品久久久久影院薰衣草 | 久久夜色撩人精品国产 | 绝对真实偷拍盗摄高清在线视频 | 国产不卡的一区二区三区四区 | 国产成人免费在线观看 | 一级黄色片毛片 | 一级女性全黄久久生活片 | 手机看片欧美 | 亚洲无限乱码一二三四区 | 国产在线精品一区二区高清不卡 | 中文三级视频 | 日本精品高清一区二区不卡 | 91久久国产精品视频 | 青青操手机看 | 国产一区二区三区 |