JS設(shè)計模式之策略模式概念與用法分析
本文實(shí)例講述了JS設(shè)計模式之策略模式概念與用法。分享給大家供大家參考,具體如下:
策略模式的概念引用:
在軟件開發(fā)中也常常遇到類似的情況,實(shí)現(xiàn)某一個功能有多種算法或者策略,我們可以根據(jù)環(huán)境或者條件的不同選擇不同的算法或者策略來完成該功能。
如查找、排序等,一種常用的方法是硬編碼(Hard Coding)在一個類中,如需要提供多種查找算法,可以將這些算法寫到一個類中,在該類中提供多個方法,每一個方法對應(yīng)一個具體的查找算法;當(dāng)然也可以將這些查找算法封裝在一個統(tǒng)一的方法中,通過if…else…或者case等條件判斷語句來進(jìn)行選擇。
這兩種實(shí)現(xiàn)方法我們都可以稱之為硬編碼,如果需要增加一種新的查找算法,需要修改封裝算法類的源代碼;更換查找算法,也需要修改客戶端調(diào)用代碼。
在這個算法類中封裝了大量查找算法,該類代碼將較復(fù)雜,維護(hù)較為困難。如果我們將這些策略包含在客戶端,這種做法更不可取,將導(dǎo)致客戶端程序龐大而且難以維護(hù),如果存在大量可供選擇的算法時問題將變得更加嚴(yán)重.
舉例說明:
一、出行旅游:我們可以有幾個策略可以考慮:可以騎自行車,汽車,做火車,飛機(jī)。每個策略都可以得到相同的結(jié)果,但是它們使用了不同的資源。
選擇策略的依據(jù)是費(fèi)用,時間,使用工具還有每種方式的方便程度 。
二、在一個購物商城,在五一做了一個活動,所以圖書類商品根據(jù)購買的金額做出以下折扣策略
1、購買滿199元,打9折
2、購買滿399元,打8折
3、購買滿599元以上,打7折;
function BookStrategy() { this.calcPrice = function( price ) { console.log("未打折 = " + price); } } function BookCalc9Strategy() { this.calcPrice = function( price ) { console.log("原價是:"+ price +";打9折后:" + (price * 0.9)); } } function BookCalc8Strategy() { this.calcPrice = function( price ) { console.log("原價是:"+ price +";打8折后:" + (price * 0.8)); } } function BookCalc7Strategy() { this.calcPrice = function( price ) { console.log("原價是:"+ price +";打7折后:" + (price * 0.7)); } } function PriceCalc( _strategy ) { this.strategy = _strategy; this.getPrice = function( price ) { return this.strategy.calcPrice( price ); } } function Client() { var price = 100; var priceCalc = null; if ( 199 <= price && price < 399 ) { priceCalc = new PriceCalc(new BookCalc9Strategy()); } else if ( 399 <= price && price < 599 ) { priceCalc = new PriceCalc(new BookCalc8Strategy()); } else if ( 599 <= price ) { priceCalc = new PriceCalc(new BookCalc7Strategy()); } else { priceCalc = new PriceCalc(new BookStrategy()); } priceCalc.getPrice(price); } Client();
運(yùn)行結(jié)果:
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
相關(guān)文章
JavaScript實(shí)現(xiàn)封裝一個快速生成目錄樹的全局腳本
目錄樹可以很好的介紹項目中各文件目錄的用途,幫助讀者了解整個項目結(jié)構(gòu)。本文就來用JavaScript封裝一個快速生成目錄樹的全局腳本,希望對大家有所幫助2023-03-03JavaScript中的for...of和for...in循環(huán)容易遇到的問題及解決方法總結(jié)
在 JavaScript 編程中,for...of 和 for...in 是常用的循環(huán)語法,但它們在使用時可能會引發(fā)一些意想不到的問題,本文將分享我在使用這兩種循環(huán)時所遇到的坑和經(jīng)驗(yàn),需要的朋友可以參考下2023-08-08基于JS+HTML實(shí)現(xiàn)彈窗提示是否確認(rèn)提交功能
這篇文章主要介紹了基于JS+HTML實(shí)現(xiàn)彈窗提示是否確認(rèn)提交功能,需要的朋友可以參考下2020-06-06個人網(wǎng)站留言頁面(前端jQuery編寫、后臺php讀寫MySQL)
這篇文章主要為大家介紹了個人網(wǎng)站的留言頁面,前端使用jQuery編寫、后臺利用php簡單讀寫MySQL數(shù)據(jù)庫,感興趣的小伙伴們可以參考一下2016-05-05JavaScript實(shí)現(xiàn)語音排隊叫號系統(tǒng)
語音排隊叫號系統(tǒng)廣泛用于銀行,餐飲,醫(yī)院等場景。本文主要介紹了通過JavaScript實(shí)現(xiàn)的語音排隊叫號系統(tǒng),有掃碼排隊,語音叫號等功能。需要的可以參考一下2021-12-12僅IE6/7/8中innerHTML返回值忽略英文空格的問題
僅IE6/7/8中innerHTML返回值忽略英文空格的問題,需要此問題的朋友可以參考下。2011-04-04全面了解函數(shù)聲明與函數(shù)表達(dá)式、變量提升
下面小編就為大家?guī)硪黄媪私夂瘮?shù)聲明與函數(shù)表達(dá)式、變量提升。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08