一区二区日本_久久久久久久国产精品_无码国模国产在线观看_久久99深爱久久99精品_亚洲一区二区三区四区五区午夜_日本在线观看一区二区

javascript模板方法模式和職責(zé)鏈模式實(shí)例分析

一、模板方法模式 1、模板方法模式,基于繼承的設(shè)計(jì)模式,由兩部分組成,抽象父類和具體實(shí)現(xiàn)子類。 2、例子Coffe 和 Tea //創(chuàng)建抽象類 -- 飲料 function Beverage(){} Beverage.prototype.boilWater

一、模板方法模式

1、模板方法模式,基于繼承的設(shè)計(jì)模式,由兩部分組成,抽象父類和具體實(shí)現(xiàn)子類。

2、例子Coffe 和 Tea

//創(chuàng)建抽象類 -- 飲料
     function Beverage(){}
     Beverage.prototype.boilWater = function(){
         console.log("把水煮沸")
     }
     //抽象的父類方法,具體實(shí)現(xiàn)由子類來寫
     Beverage.prototype.brew = function(){} //泡
     Beverage.prototype.pourIncup = function(){} //飲料倒進(jìn)杯子
     Beverage.prototype.addCond = function(){} //加調(diào)料
     Beverage.prototype.init = function(){
         this.boilWater();
         this.brew();
         this.pourIncup();
         this.addCond();
     }
     //創(chuàng)建具體子類 coffee and tea
     var Coffee = function (){};
     Coffee.prototype = new Beverage();
     Coffee.prototype.brew = function (){
         console.log("用沸水沖泡咖啡")
     }
     Coffee.prototype.brew = function (){
         console.log("把咖啡倒進(jìn)杯子")
     }
     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("茶倒進(jìn)杯子")
     }
     Tea.prototype.brew = function (){
         console.log("加檸檬")
     }
     var tea= new Tea();
     tea.init();

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

??抽象方法沒有具體的實(shí)現(xiàn)過程,是一些啞方法,當(dāng)子類繼承這個(gè)抽象類,必須重寫父類的抽象方法。

如果子類忘記實(shí)現(xiàn)父類中的抽象方法?

Beverage.prototype.brew = function (){
    throw new Error("子類必須重寫父類的brew方法")
}

二、職責(zé)鏈模式

1、職責(zé)鏈模式:弱化了發(fā)送(請(qǐng)求)-接收者之間的強(qiáng)聯(lián)系。

2、購(gòu)物付定金例子

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

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

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

更多設(shè)計(jì)模式相關(guān)知識(shí)點(diǎn),還可以參考本站文章:

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

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

聲明:所有內(nèi)容來自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準(zhǔn)確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。
發(fā)表評(píng)論
更多 網(wǎng)友評(píng)論0 條評(píng)論)
暫無評(píng)論

返回頂部

主站蜘蛛池模板: 亚洲精品电影在线观看 | 精品综合 | 亚洲国产成人精品女人久久久 | 欧美一区二区三区视频在线观看 | 成人九区 | av毛片| 国产午夜三级一区二区三 | 亚洲免费网址 | 色爱综合网 | 国产精品久久久久久久久婷婷 | 久久尤物免费一区二区三区 | 久久激情av| 亚洲综合视频 | 在线看无码的免费网站 | 国产成人精品久久二区二区91 | 成人深夜福利 | 亚洲欧美日韩精品久久亚洲区 | 一区二区电影网 | 欧美日韩久久 | 欧美成人一区二免费视频软件 | 国产精品久久久久av | 日韩中文一区二区三区 | 亚洲午夜精品一区二区三区 | 97成人免费 | 91久久久久久 | 午夜激情在线视频 | 午夜视频一区二区 | 久久一二区 | 欧洲亚洲视频 | 人人亚洲 | 情侣酒店偷拍一区二区在线播放 | 亚洲国产精品区 | 亚洲欧美激情精品一区二区 | 亚洲美女一区二区三区 | 日本人做爰大片免费观看一老师 | 欧美国产一区二区 | 91久久精品一区二区三区 | 久久久精品影院 | 久久精品亚洲精品 | 国产乱码久久久久久一区二区 | 欧美国产日本一区 |