JavaScript之策略模式
策略模式:定義一系列演算法,把它們一個個封裝起來,並且使它們可以相互替換
舉個栗子
假設我們要實現一個計算個人獎金數額的函式:
var calcBonus = function (level, salary) {
if (level === 'A') {
return salary * 4;
}
if (level === 'B') {
return salary * 3;
}
if (level === 'C') {
return salary * 2;
}
}
console.log(calcBonus('A', 1000)); // 輸出 4000
console.log(calcBonus('B', 1000)); // 輸出 4000
這段程式碼的缺點顯然易見:
- 函式體龐大,包含大量的if-else
- 缺乏彈性,如果想增加一種’D’等級,或者把績效A的獎金係數變成5將會非常麻煩,要深入函式內部改變函式體。
- 程式碼複用性差,如果想在程式的其他部分想用這些計算獎金的演算法我們就只有複製貼上啦。
使用策略模式重構程式碼
var strategies = {
'A': function (salary) {
return salary * 4;
},
'B': function () {
return salary * 3;
},
'C': function () {
return salary * 2;
}
}
var calcBonus = function (leve, salary) {
return strategies[level](salary);
}
console.log(calcBonus('A', 2000)); //輸出 8000
策略模式優缺點
優點:
- 利用組合,委託和多型等技術和思想,可以有效避免多重條件語句
- 提供了對開閉原則的支援,將演算法獨立封裝在strategies裡面。
- 模式中的演算法可以複用在多個地方。
缺點:
- 增加了大量的策略物件
- 要是用策略模式就要了解所有策略的實現
- 暴漏了演算法
相關推薦
JavaScript之策略模式
策略模式:定義一系列演算法,把它們一個個封裝起來,並且使它們可以相互替換 舉個栗子 假設我們要實現一個計算個人獎金數額的函式: var calcBonus = func
JavaScript設計模式之策略模式
一個 是否 strong 今天 自帶 所有 log 執行 修改 所謂“條條道路通羅馬”,在現實中,為達到某種目的往往不是只有一種方法。比如掙錢養家:可以做點小生意,可以打分工,甚至還可以是偷、搶、賭等等各種手段。在程序語言設計中,也會遇到這種類似的情況,要實現某種功能可以有
【javascript】javasrcipt設計模式之策略模式
影響 配置 可能 pan style 類庫 ava 自由 AC 策略模式支持在運行時由使用者選擇合適的算法,對於使用者而言不用關心背後的具體事項,而使用者自動根據當前程序執行的上下文和配置,從已有的算法列表中選擇出合適的算法來處理當前任務。 1.要解決的問題 2.如何實現
JavaScript設計模式之策略模式【組合委託】
>前言:語言只是工具,思想才是核心 >今天要總結的是 策略模式 策略在開發中的應用非常廣泛,所以也是非常常見且使用的設計模式。 在實際開發中,往往在實現一個功能時,有多種解決方案可行。 ### 常見場景: - 解壓:gzip演算法解壓,gzip演算法解壓 - 表單驗證:手機號驗證,郵箱驗證,密
深入理解javascript之設計模式
rip 是我 解決問題 不想 接受 button move center 常識 設計模式 設計模式是命名、抽象和識別對可重用的面向對象設計實用的的通用設計結構。設計模式確定類和他們的實體、他們的角色和協作、還有他們的責任分配。 每個設計模式都聚焦於一個面向對象的設計難題
設計模式之策略模式
條件 cti round ces 配置 urn 表單提交 spa 成了 在web項目中,表單的驗證和提交是我們經常開發的功能之一。下面我們來看一下一般情況下我們如何驗證一個用戶的註冊。 需求: 註冊需要用戶名,密碼,手機號碼,郵箱 所有選項不能為空 密碼要長度不能少於8位,
設計模式之策略模式&簡單工廠模式
抽象 jsb args watermark amp pri eas 時間 並且 學習設計模式已經有非常長一段時間了。事實上先前已經敲過一遍了,可是老認為沒有學到什麽,認識也不夠深刻,如今趁著重構機房。再又一次來過,也不晚。 事實上在敲了機房之後,看看模式,事實
PHP設計模式之策略模式
lang 女裝 keyword 種類 tty protect 電子產品 number 添加 1.概念 策略模式:將一組特定的行為和算法封裝成類。以適應某些特定的上下文環境,這樣的模式就是策略模式 2.功能 使用策略模式實現Ioc,
《JAVA與模式》之策略模式
tcc ie9 wmi cfb jin uem col sga pid 策略模式屬於對象的行為模式。其用意是針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,從而使得它們可以相互替換。策略模式使得算法可以在不影響到客戶端的情況下發生變化。 策略模式的結構 策略
java設計模式之策略模式總結
客戶端 出場 cnblogs ava java設計 bsp image 需要 com 策略模式的定義:(定義截自http://www.cnblogs.com/whgk/p/6087064.html) 1、策略模式定義了算法族,分別封裝起來,讓他們之間可以互相替換,此模式讓算
java23中設計模式之策略模式
log author 批量 isp contex view strategy ext 不同 package com.bjsxt.strategy; /** * 負責和具體的策略類交互 * 這樣的話,具體的算法和直接的客戶端調用分離了,使得算法可以獨立於客戶端獨立
Java設計模式之策略模式
pattern 管理 父類 interface face 缺點 this err 相互 策略模式屬於對象的行為模式,策略模式定義了一系列的算法,並將每一個算法封裝起來,而且使它們還可以相互替換,策略模式讓算法獨立於使用它的客戶而獨立變化。策略模式使這些算法在客
設計模式之 策略模式
算法 nal class 我們 mint images iss factor () 策略模式屬於對象行為型的設計模式 定義 :封裝了一些列算法,它們之前可以相互替換,此模式使得算法的改變,不會影響到使用它們的客戶端 策略模式有以下3個角色組成 抽象策略類 : 所有
java 之 策略模式(大話設計模式)
src 客戶端代碼 div strategy ring 溫故 bre str disco 溫故而知新,每次讀設計模式都會有不同的體驗,堅持每天一個設計模式,直到熟練運用設計模式。 策略模式定義了很多完成相同工作的算法,但實現不同,它可以以相同的方式調用所有的算法,減少了算法
設計模式之策略模式在地鐵票價系統中的應用
我們 分享圖片 地鐵 不同類 mes public 包括 lock 1.0 引言 設計模式是面向對象編程的一個非常精彩的部分。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性,它能幫助我們將應用組織成容易了解,容易維護,具有彈性的架構。本文通過一個簡單的
【設計模式學習筆記】 之 策略模式
實際類型 clas equals 的確 ron 設計 poj 擴展 打印sql 簡介: 經常網購的可能發現京東、淘寶等電商平臺每到什麽節日都會進行打折,這種打折就是一種策略,策略模式的意思呢,就是把不變的和易變的策略分離開,需要什麽策略時候,把需要的策略傳給執行體,而不是執
設計模式:HelloWorld之策略模式
for plane span 代碼實現 class 一個 取出 影響 設計 一.概述 策略模式 定義了算法族,分別封裝起來,讓他們可以互相替換,此模式讓算法的變化獨立於使用算法的客戶。 策略模式的三要素: 抽象策略角色: 策略類,通常由一個接口或者抽象類實現。 具體策略角色
大話設計模式之策略模式
系統 AC 抽象類 技術 algo str stat 出現 args 背景: 商場促銷期間,可能會出現8折、5折的促銷活動,也可能出現滿100減10、滿200減30的促銷活動,設計一個收銀系統。 策略模式:定義了算法家族,讓它們之間可以互相替換,此模式讓算法的變化不會影響到
前端也要學系列:設計模式之策略模式
語句 做的 一個 code IE 說我 目的 ret 曾經 做前端開發已經好幾年了,對設計模式一直沒有深入學習總結過。隨著架構相關的工作越來越多,越來越能感覺到設計模式成為了我前進道路上的一個阻礙。所以從今天開始深入學習和總結經典的設計模式以及面向對象的幾大原則。 今天
23種設計模式之——策略模式
方法 單獨 mage concrete 不用 進行 工廠 點擊 ret 什麽是策略模式? 它定義了算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化,不會影響到使用算法的客戶。 什麽時候去使用策略模式? 策略模式就是用來封裝算法的,但是在實踐中,我們發現可以