亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

javascript 策略設(shè)計(jì)模式

willin / 2332人閱讀

摘要:策略就是根據(jù)形勢(shì)的發(fā)展而制定的行動(dòng)方針。策略模式實(shí)現(xiàn)重構(gòu)首先,我們需要?jiǎng)?chuàng)建一個(gè)策略類組,然后在創(chuàng)建一個(gè)獎(jiǎng)金類。策略模式添加一個(gè)類這種實(shí)現(xiàn)方式,研究源碼的同學(xué)經(jīng)常遇到,在,等庫和前端框架中比較常見。設(shè)計(jì)模式相關(guān)文章

什么是策略。

策略就是根據(jù)形勢(shì)的發(fā)展而制定的行動(dòng)方針。

比如說春節(jié)快要到了,我們要回家,回家我們就要選擇交通工具。怎么回家我們就需要制定方案。比如說我吧,我們家在河南一個(gè)農(nóng)村,不管是汽車,火車,飛機(jī)都沒有直達(dá)的。我可以選擇從北京到鄭州乘火車,然后從北京到長(zhǎng)葛做長(zhǎng)途汽車,然后從長(zhǎng)葛到家做短途汽車。當(dāng)然也可以選擇其他方式,這就要根據(jù)自己的實(shí)際需要,時(shí)間不緊花費(fèi)又低我一般就選擇這個(gè)方案。

開發(fā)中的策略模式使用

策略模式定義:定義一系列的算法,然后把它們一個(gè)個(gè)的封裝起來,這些封裝起來的算法可以相互替換。

舉一個(gè)年終獎(jiǎng)金計(jì)算的例子,分為A,B,C,D四類,其中A類總經(jīng)理,B類部門經(jīng)理,C類項(xiàng)目負(fù)責(zé)人,D類開發(fā)人員。

一般情況,代碼實(shí)現(xiàn)如下:

var calBonus = function (level, salary) {
    if( level === "A") {
        return salary*2;
    }
    if( level === "B") {
        return salary*1.5;
    }
    if( level === "C") {
        return salary*1.0;
    }
    if( level === "D") {
        return salary*0.75;
    }
}

這種代碼的實(shí)現(xiàn)方式很常見,但是效果不是那么好,在這個(gè)函數(shù)體內(nèi)一個(gè)條件就是一個(gè)算法策略,在實(shí)際開發(fā)中它們往往實(shí)現(xiàn)比較復(fù)雜,代碼量比較大,一個(gè)兩個(gè)沒什么,如果再增加幾個(gè)或者十幾個(gè)呢,或者我們?cè)谠黾?00個(gè)呢?明顯這種實(shí)現(xiàn)方式的彈性很差,復(fù)用性也比較差。

如果,代碼體積較小,分支較少使用條件判斷未嘗不可,但是如果,條件分支較多且代碼體積較大比建議。

組合函數(shù)實(shí)現(xiàn)重構(gòu)

開發(fā)中我們往往會(huì)用的一種組合函數(shù)重構(gòu)的方式來實(shí)現(xiàn),代碼修改如下:

function levelA (salary) {
    return salary*2;
}

function levelB (salary) {
    return salary*1.5;
}

function levelC (salary) {
    return salary*1.0;
}

function levelD (salary) {
    return salary*0.75;
}

var calBonus = function(leveType, salary) {
    if(levelType === "A") {
        return leveA(salary);
    }
    
    if(levelType === "B") {
        return leveB(salary);
    }

    if(levelType === "C") {
        return leveC(salary);
    }

    if(levelType === "D") {
        return leveD(salary);
    }
}

這樣修改后的代碼確實(shí)使用起來,比剛開始好了許多,但是這樣的實(shí)現(xiàn)方式,還是彈性不足,如果擴(kuò)展的話回事calBonus函數(shù)的體積越來越大。這時(shí)我們往往會(huì)考慮設(shè)計(jì)模式。

策略模式實(shí)現(xiàn)重構(gòu)

首先,我們需要?jiǎng)?chuàng)建一個(gè)策略類組,然后在創(chuàng)建一個(gè)獎(jiǎng)金類。具體代碼實(shí)現(xiàn)如下:

// A類
function LevelA() {}

LevelA.prototype.cal = function(salary) {
    return salary*2;
}

// B類
function LevelB() {}

LevelB.prototype.cal = function(salary) {
    return salary*1.5;
}

// C類
function LevelC() {}

LevelC.prototype.cal = function(salary) {
    return salary*1;
}

// D類
function LevelD() {}

LevelD.prototype.cal = function(salary) {
    return salary*0.75;
}

// 定義一個(gè)獎(jiǎng)金類
function Bonus () {
    this.strategy = null;
    this.salary = null;
}
// 獎(jiǎng)金strategy
Bonus.prototype.setStrategy = function(strategy) {
    this.strategy = strategy;
}
// 設(shè)置salary
Bonus.prototype.setSalary = function(salary) {
    this.salary = salary;
}
// 獲取獎(jiǎng)金
Bonus.prototype.getBonus = function() {
    return this.strategy.cals(this.salary)
}

// A
var bonus = new Bonus();
bonus.setSalary(10000);
bonus(new LevelA());
bonus.getBonus()

// B
var bonus = new Bonus();
bonus.setSalary(8000);
bonus(new LevelB());
bonus.getBonus()

在javascript中,我們都知道,函數(shù)也是對(duì)象,所以更簡(jiǎn)單的方法就是將每一種策略定義成函數(shù),而非上面的實(shí)現(xiàn)方式。

JavaScript策略模式
function levelA (salary) {
    return salary*2;
}

function levelB (salary) {
    return salary*1.5;
}

function levelC (salary) {
    return salary*1.0;
}

function levelD (salary) {
    return salary*0.75;
}

var Bonus = {
    levelA : levelA,
    levelB : levelB,
    levelC : levelC,
    levelD : levelD,
};

var calBonus = function(level, salary) {
    return Bonus[level](salary);
}

calBonus("levelA", 30000); // 60000

// 添加一個(gè)E類
var levelE = function (salary) {
    return salary*0.5;
}

Bonus.levelE = levelE;

calBonus("levelE", 5000); // 2500

這種實(shí)現(xiàn)方式,研究源碼的同學(xué)經(jīng)常遇到,在jQuery,validator等庫和前端框架中比較常見。

設(shè)計(jì)模式相關(guān)文章

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/92529.html

相關(guān)文章

  • JavaScript設(shè)計(jì)模式----策略模式

    摘要:實(shí)際上在這種將函數(shù)作為一等對(duì)象的語言里,策略模式已經(jīng)融入到了語言本身當(dāng)中,我們經(jīng)常使用高階函數(shù)來封裝不同的行為,并且把它傳遞到另一個(gè)函數(shù)中。 聲明:這個(gè)系列為閱讀《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》 ----曾探@著一書的讀書筆記 1.策略模式的定義 將不變的部分和變化的部分隔開是每個(gè)設(shè)計(jì)模式的主題。 定義一系列的算法,把它們一個(gè)個(gè)封裝起來,并且使它們可以相互替換。 2.策略模式...

    forrest23 評(píng)論0 收藏0
  • JavaScript 設(shè)計(jì)模式(二):策略模式

    摘要:策略模式實(shí)現(xiàn)的也是類似的場(chǎng)景。第二個(gè)部分是環(huán)境類不變,接收客戶的請(qǐng)求,隨后把請(qǐng)求委托給某一個(gè)策略類。參考文章設(shè)計(jì)模式設(shè)計(jì)模式與開發(fā)實(shí)踐設(shè)計(jì)模式系統(tǒng)講解與應(yīng)用本文首發(fā),期待作者以樂之名本文原創(chuàng),有不當(dāng)?shù)牡胤綒g迎指出。 showImg(https://segmentfault.com/img/bVbugi7?w=800&h=600); 策略模式:定義一系列的算法,把它們一個(gè)個(gè)封裝起來,并且...

    荊兆峰 評(píng)論0 收藏0
  • JS策略模式JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》閱讀筆記

    摘要:策略模式可以避免代碼中的多重判斷條件。策略模式在程序中或多或少的增加了策略類。此文僅記錄本人閱讀設(shè)計(jì)模式與開發(fā)實(shí)踐這個(gè)本時(shí)的感受,感謝作者曾探寫出這么好的一本書。設(shè)計(jì)模式中很重要的一點(diǎn)就是將不變和變分離出來。參考設(shè)計(jì)模式與開發(fā)實(shí)踐曾探 策略模式的定義是:定義一系列的算法,把它們一個(gè)個(gè)封裝起來,并且是它們可以相互替換。 策略模式可以避免代碼中的多重判斷條件。 策略模式很好的體現(xiàn)了開放-...

    Amos 評(píng)論0 收藏0
  • JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐系列之策略模式

    摘要:本系列為設(shè)計(jì)模式與開發(fā)實(shí)踐作者曾探學(xué)習(xí)總結(jié),如想深入了解,請(qǐng)支持作者原版策略模式策略模式的定義定義一系列的算法,把它們一個(gè)個(gè)封裝起來,并且使它們可以互相替換。 本系列為《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》(作者:曾探)學(xué)習(xí)總結(jié),如想深入了解,請(qǐng)支持作者原版 策略模式 策略模式的定義:定義一系列的算法,把它們一個(gè)個(gè)封裝起來,并且使它們可以互相替換。 舉個(gè)形象的例子,使用策略模式計(jì)算...

    spademan 評(píng)論0 收藏0
  • javascript設(shè)計(jì)模式--策略模式

    摘要:策略模式總結(jié)什么是策略模式策略模式的定義是定義一系列的算法,把他們獨(dú)立封裝起來,并且可以相互替換。策略模式的使用如果策略模式僅僅是用來封裝算法,可能有點(diǎn)小才大用了。原文鏈接設(shè)計(jì)模式策略模式上一篇設(shè)計(jì)模式單例模式 javascript策略模式總結(jié) 1.什么是策略模式? 策略模式的定義是:定義一系列的算法,把他們獨(dú)立封裝起來,并且可以相互替換。 例如我們需要寫一段代碼來計(jì)算員工的獎(jiǎng)金。當(dāng)績(jī)...

    ztyzz 評(píng)論0 收藏0
  • javascript設(shè)計(jì)模式--策略模式

    摘要:策略模式總結(jié)什么是策略模式策略模式的定義是定義一系列的算法,把他們獨(dú)立封裝起來,并且可以相互替換。策略模式的使用如果策略模式僅僅是用來封裝算法,可能有點(diǎn)小才大用了。原文鏈接設(shè)計(jì)模式策略模式上一篇設(shè)計(jì)模式單例模式 javascript策略模式總結(jié) 1.什么是策略模式? 策略模式的定義是:定義一系列的算法,把他們獨(dú)立封裝起來,并且可以相互替換。 例如我們需要寫一段代碼來計(jì)算員工的獎(jiǎng)金。當(dāng)績(jī)...

    李文鵬 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<