欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

本文實(shí)例講述了JS設(shè)計(jì)模式之策略模式概念與用法。分享給大家供大家參考,具體如下:

策略模式的概念引用:

在軟件開(kāi)發(fā)中也常常遇到類(lèi)似的情況,實(shí)現(xiàn)某一個(gè)功能有多種算法或者策略,我們可以根據(jù)環(huán)境或者條件的不同選擇不同的算法或者策略來(lái)完成該功能。

如查找、排序等,一種常用的方法是硬編碼(Hard Coding)在一個(gè)類(lèi)中,如需要提供多種查找算法,可以將這些算法寫(xiě)到一個(gè)類(lèi)中,在該類(lèi)中提供多個(gè)方法,每一個(gè)方法對(duì)應(yīng)一個(gè)具體的查找算法;當(dāng)然也可以將這些查找算法封裝在一個(gè)統(tǒng)一的方法中,通過(guò)if…else…或者case等條件判斷語(yǔ)句來(lái)進(jìn)行選擇。

這兩種實(shí)現(xiàn)方法我們都可以稱(chēng)之為硬編碼,如果需要增加一種新的查找算法,需要修改封裝算法類(lèi)的源代碼;更換查找算法,也需要修改客戶端調(diào)用代碼。

在這個(gè)算法類(lèi)中封裝了大量查找算法,該類(lèi)代碼將較復(fù)雜,維護(hù)較為困難。如果我們將這些策略包含在客戶端,這種做法更不可取,將導(dǎo)致客戶端程序龐大而且難以維護(hù),如果存在大量可供選擇的算法時(shí)問(wèn)題將變得更加嚴(yán)重.

舉例說(shuō)明:

一、出行旅游:我們可以有幾個(gè)策略可以考慮:可以騎自行車(chē),汽車(chē),做火車(chē),飛機(jī)。每個(gè)策略都可以得到相同的結(jié)果,但是它們使用了不同的資源。

選擇策略的依據(jù)是費(fèi)用,時(shí)間,使用工具還有每種方式的方便程度 。

二、在一個(gè)購(gòu)物商城,在五一做了一個(gè)活動(dòng),所以圖書(shū)類(lèi)商品根據(jù)購(gòu)買(mǎi)的金額做出以下折扣策略

1、購(gòu)買(mǎi)滿199元,打9折
2、購(gòu)買(mǎi)滿399元,打8折
3、購(gòu)買(mǎi)滿599元以上,打7折;

function BookStrategy() {
 this.calcPrice = function( price ) {
 console.log("未打折 = " + price);
 }
}
function BookCalc9Strategy() {
 this.calcPrice = function( price ) {
 console.log("原價(jià)是:"+ price +";打9折后:" + (price * 0.9));
 }
}
function BookCalc8Strategy() {
 this.calcPrice = function( price ) {
 console.log("原價(jià)是:"+ price +";打8折后:" + (price * 0.8));
 }
}
function BookCalc7Strategy() {
 this.calcPrice = function( price ) {
 console.log("原價(jià)是:"+ 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)容可查看本站專(zhuān)題:《javascript面向?qū)ο笕腴T(mén)教程》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論