国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS策略模式《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》閱讀筆記

Amos / 2234人閱讀

摘要:策略模式可以避免代碼中的多重判斷條件。策略模式在程序中或多或少的增加了策略類。此文僅記錄本人閱讀設(shè)計(jì)模式與開發(fā)實(shí)踐這個(gè)本時(shí)的感受,感謝作者曾探寫出這么好的一本書。設(shè)計(jì)模式中很重要的一點(diǎn)就是將不變和變分離出來。參考設(shè)計(jì)模式與開發(fā)實(shí)踐曾探

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

策略模式可以避免代碼中的多重判斷條件。

策略模式很好的體現(xiàn)了開放-封閉原則,將一個(gè)個(gè)算法(解決方案)封裝在一個(gè)個(gè)策略類中。便于切換,理解,擴(kuò)展。

策略中的各種算法可以重復(fù)利用在系統(tǒng)的各個(gè)地方,避免復(fù)制粘貼。

策略模式在程序中或多或少的增加了策略類。但比堆砌在業(yè)務(wù)邏輯中要清晰明了。

違反最少知識原則,必須要了解各種策略類,才能更好的在業(yè)務(wù)中應(yīng)用。

此文僅記錄本人閱讀《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》這個(gè)本時(shí)的感受,感謝作者曾探寫出這么好的一本書。如有冒犯,如有錯(cuò)誤,請聯(lián)系本人處理。

簡單的業(yè)務(wù)場景
計(jì)算員工年終獎(jiǎng)需要根據(jù)不同的員工績效計(jì)算不同的獎(jiǎng)金。例如,績效為S的人年終獎(jiǎng)有4倍工資。績效A的人年終獎(jiǎng)有3倍工資,績效B的人有2倍工資。

用代碼實(shí)現(xiàn):

var calculateBonus = function(performanceLevel, salary) {
    if (performanceLevel === "S") {
        return salary * 4
    }
    if (performanceLevel === "A") {
        return salary * 3
    } 
    if (performanceLevel === "B") {
        return salary * 2
    }
}

calculateBonus("S", 2000) // 8000
calculateBonus("A", 2000) // 6000

其實(shí)上面一段代碼已經(jīng)能應(yīng)付目前的場景。但是,當(dāng)獎(jiǎng)金的評定需要增加一個(gè)績效C,或者改變績效A的計(jì)算方式。此時(shí)需要更改上面這個(gè)calculateBonus方法的內(nèi)部結(jié)構(gòu),如此下去,這個(gè)方法內(nèi)部將變得冗雜。

設(shè)計(jì)模式中很重要的一點(diǎn)就是將不變和變分離出來。這里變的是怎么算。不變的是根據(jù)一個(gè)績效獲得一個(gè)結(jié)果。所以上述代碼重寫,把各種算法封裝在一個(gè)個(gè)策略類中(傳統(tǒng)面向?qū)ο蟮哪7?:

var performanceS = function() {}
performanceS.prototype.calc = function(salary) {
    return salary * 4
}

var performanceA = function() {}
performanceA.prototype.calc = function(salary) {
    return salary * 3
}

var performanceB = function() {}
performanceB.prototype.calc = function(salary) {
    return salary * 2
}

//獎(jiǎng)金類Bonus
var Bonus = function() {
    this.salary = null //原始工資
    this.strategy = null // 績效等級對應(yīng)的策略對象
}

Bonus.prototype.setSalary = function(salary) {
    this.salary = salary //設(shè)置工資
}

Bonus.prototype.setStrategy = function(strategy) {
    this.strategy = strategy //設(shè)置員工績效對應(yīng)的策略對象
}

Bonus.prototype.getBonus = function() { //獲取獎(jiǎng)金數(shù)額
    return this.strategy.calc(this.salary) //把計(jì)算獎(jiǎng)金的操作委托個(gè)對應(yīng)的策略對象
}

var bonus = new Bonus()
bonus.setSalary(10000)
bonus.setStrategy(new performanceA())

console.log(bonus.getBonus()) // 30000
JavaScript版本的策略模式

在JavaScript中可以將一個(gè)個(gè)策略類寫成函數(shù),然后封裝在對象中:

// 計(jì)算獎(jiǎng)金的例子
var strategies = {
    S: function(salary) {
        return salary * 4
    },
    A: function(salary) {
        return salary * 3
    },
    B: function(salary) {
        return salary * 2
    }
}

var calculateBonus = function(level, salary) {
    return strategies[level](salary)
}

console.log(calculateBonus("S", 10000)) // 40000
console.log(calculateBonus("S", 20000)) // 80000
更廣義的“算法”

策略模式指的是一系列的算法(策略),并且把它們封裝起來。計(jì)算獎(jiǎng)金的列子中就封裝了一些算法。其實(shí)世紀(jì)業(yè)務(wù)中也可以利用策略模式來封裝一些“業(yè)務(wù)規(guī)則”。

表單驗(yàn)證

在Web項(xiàng)目中往往有很多場景需要提交表單。前端在把數(shù)據(jù)提交到后端之前,需要進(jìn)行一波表單驗(yàn)證,來減少不必要的網(wǎng)絡(luò)請求。在表單驗(yàn)證中往往會有多種校驗(yàn)規(guī)則,頁面中可能會有多個(gè)表單要進(jìn)行驗(yàn)證。此時(shí)可以用策略模式來實(shí)現(xiàn)一個(gè)表單驗(yàn)證:

輸入用戶名: 輸入密碼: 輸入手機(jī)號碼:
總結(jié)

在日常開發(fā)中一些工具函數(shù)可以封裝在一起,組成自己的工具庫。減少不必要的代碼復(fù)制粘貼。

感覺敲代碼思想更重要啦,這里策略模式體現(xiàn)了開放-封閉原則降低代碼的耦合度。這些理念都是我自己在敲代碼的路上要慢慢學(xué)習(xí)和積累的。

敲出來的代碼不能只有自己認(rèn)識。要多注意細(xì)節(jié),時(shí)刻去想哪些代碼可以再多完善。

當(dāng)然不是所有的東西都要分來分去,一個(gè)簡單的需求為了設(shè)計(jì)模式而去設(shè)計(jì)模式也是不可取的。

love & peace

參考

《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》—— 曾探

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/95346.html

相關(guān)文章

  • JS迭代器模式JavaScript設(shè)計(jì)模式開發(fā)實(shí)踐閱讀筆記

    摘要:但實(shí)際中,內(nèi)部迭代器和外部迭代器兩者并無優(yōu)劣。迭代器并不只迭代數(shù)組迭代器模式不僅能迭代數(shù)組,還可以迭代一些類數(shù)組對象。晚安了,參考設(shè)計(jì)模式與開發(fā)實(shí)踐曾探本文作者本文鏈接迭代器模式設(shè)計(jì)模式與開發(fā)實(shí)踐閱讀筆記 迭代器模式:一個(gè)相對簡單的模式,目前絕大多數(shù)語言都內(nèi)置了迭代器,以至于大家都不覺得這是一種設(shè)計(jì)模式 迭代器模式 迭代器模式指提供一種方法訪問一個(gè)聚合對象中的各個(gè)元素,而又不需要暴露該...

    djfml 評論0 收藏0
  • JS代理模式JavaScript設(shè)計(jì)模式開發(fā)實(shí)踐閱讀筆記

    摘要:保護(hù)代理和虛擬代理保護(hù)代理當(dāng)有許多需求要向某對象發(fā)出一些請求時(shí),可以設(shè)置保護(hù)代理,通過一些條件判斷對請求進(jìn)行過濾。虛擬代理在程序中可以能有一些代價(jià)昂貴的操作。而虛擬代理是最常用的一種代理模式。 代理模式 代理模式是為一個(gè)對象提供一個(gè)代用品或占位符,以便控制對它的訪問。 保護(hù)代理和虛擬代理 保護(hù)代理:當(dāng)有許多需求要向某對象發(fā)出一些請求時(shí),可以設(shè)置保護(hù)代理,通過一些條件判斷對請求進(jìn)行過濾。...

    mist14 評論0 收藏0
  • 某熊的技術(shù)之路指北 ?

    某熊的技術(shù)之路指北 ? 當(dāng)我們站在技術(shù)之路的原點(diǎn),未來可能充滿了迷茫,也存在著很多不同的可能;我們可能成為 Web/(大)前端/終端工程師、服務(wù)端架構(gòu)工程師、測試/運(yùn)維/安全工程師等質(zhì)量保障、可用性保障相關(guān)的工程師、大數(shù)據(jù)/云計(jì)算/虛擬化工程師、算法工程師、產(chǎn)品經(jīng)理等等某個(gè)或者某幾個(gè)角色。某熊的技術(shù)之路系列文章/書籍/視頻/代碼即是筆者蹣跚行進(jìn)于這條路上的點(diǎn)滴印記,包含了筆者作為程序員的技術(shù)視野、...

    shadowbook 評論0 收藏0
  • JavaScript設(shè)計(jì)模式開發(fā)實(shí)踐》讀書筆記

    摘要:訂閱模式的一個(gè)典型的應(yīng)用就是后面會寫一篇相關(guān)的讀書筆記。享元模式享元模式的核心思想是對象復(fù)用,減少對象數(shù)量,減少內(nèi)存開銷。適配器模式對目標(biāo)函數(shù)進(jìn)行數(shù)據(jù)參數(shù)轉(zhuǎn)化,使其符合目標(biāo)函數(shù)所需要的格式。 設(shè)計(jì)模式 單例模式 JS的單例模式有別于傳統(tǒng)面向?qū)ο笳Z言的單例模式,js作為一門無類的語言。使用全局變量的模式來實(shí)現(xiàn)單例模式思想。js里面的單例又分為普通單例和惰性單例,惰性單例指的是只有這個(gè)實(shí)例...

    Panda 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<