亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JS設(shè)計模式之策略模式概念與用法分析

 更新時間:2018年02月05日 08:55:06   作者:itpinpai  
這篇文章主要介紹了JS設(shè)計模式之策略模式概念與用法,簡單分析了策略模式的基本概念、原理并結(jié)合實(shí)例形式分析了javascript實(shí)現(xiàn)與使用策略模式的相關(guān)操作技巧,需要的朋友可以參考下

本文實(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)文章

最新評論