JavaScript設計模式策略模式案例分享

前言

策略設計模式就是指一個問題匹配多個解決方法,不一定要用到哪一個,而且有可能隨時增加多個方案

比如我們去買書,書店都會搞一些優惠活動,滿100減20,滿200減50,八折優惠這些,但是優惠活動源源不止這些,後期會陸續添加優惠活動,比如雙11活動打七折,等到雙11活動過去之後打七折活動還需要取消

我們先不用策略設計模式進行實現計算折扣後價格,我們聲明一個方法,裡面接受倆個參數,這倆個參數一個是價格一個是折扣種類,然後在方法裡面使用if語句判斷折扣種類計算價格,如果沒有折扣就是原價,最後把計算過的折扣價格返回出去

//price 價格 
//type 折扣種類
 function calcPrice(price, type) {
            if (type == '100_20') {
                price -= 20
            } else if (type == '200_50') {
                price -= 50
            }
            return price;

        }
        // 使用
        const bookPrice = calcPrice(300, '100_20')

這種方式如果是折扣活動比較少的情況下還行,但是每次添加新的折扣活動都需要去往方法裡面添加折扣活動的if語句判斷以及記住新折扣種類的字段以免和之前的折扣活動名字重復,對於折扣活動到期的情況還需要手動進行刪除該if語句,長此以往代碼不僅冗餘還很維護

使用策略設計模式實現:

我們聲明一個閉包函數,閉包函數中有一個折扣種類中心,裡面有默認的幾個折扣種類,還有一個計算折扣價格的方法,方法上我們又給他定義瞭倆個方法,一個是添加折扣種類方法,一個是刪除折扣種類方法,然後在把計算折扣方法暴露出去就可以瞭

//計算折扣價格閉包函數
        const calcPrice = (function() {
            // 折扣種類中心
            const sale = {
           //100-20折扣活動
                    '100_20': function(price) {
                        return price -= 20
                    },
                    //200-50折扣活動
                    '200_50': function(price) {
                        return price -= 50
                    },
                    //打八折折扣活動
                    '80%': function(price) {
                        return price *= 0.8
                    },
                }
     
               /** *
               * 計算折扣價格
               * price 價格 
               * type 折扣類型
               * **/
            function totalPrice(price, type) {
                // 判斷折扣種類裡面是否擁有這個折扣類型,如果有就執行,沒有就返回原價
                if (sale[type]) {
                    // 使用折扣函數
                    price = sale[type](price)
                }
                // 返回價格
                return price
            }
            /**
             * 
             *  添加折扣方法
             *  type  折扣類型
             * callback 折扣類型方法
             * **/
            totalPrice.add = function(type, callback) {
                    // 判斷折扣類型是否存在
                    if (sale[type]) return '折扣已存在'
                    //給折扣類型中心添加折扣價格方法
                    sale[type] = callback
                    return '折扣方法添加成功'
                }
                // 刪除折扣方法
                totalPrice.del(type){
                //通過delete關鍵字刪除折扣類型中心方法
                   delete   sale[type] 
                }
             // 被return出去的函數,才是計算價格的本體
            return totalPrice
        })();
        //使用計算價格
        const bookPrice = calcPrice(240, '200_50');
       //添加打七折折扣類型方法
       calcPrice.add('70%',function(price) {return price *= 0.7 })
       //刪除打八折折扣類型方法
        calcPrice.add('80%')

策略設計模式擁有易於維護,易於理解,易於擴展的特點

到此這篇關於JavaScript設計模式策略模式案例分享的文章就介紹到這瞭,更多相關JavaScript 策略模式內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: