国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

JavaScript設(shè)計模式之策略模式詳解

2024-05-06 16:37:42
字體:
供稿:網(wǎng)友

在程序設(shè)計中,我們也常常遇到這種情況,要實現(xiàn)某一個功能我們有很多種算法可以實現(xiàn)。

這些算法靈活多樣,而且可以隨意互相替換。這種解決方案就是所謂的策略模式。

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

/* * pre:策略模式 * 示例:公司計算獎金,分A、B、C 三種績效,計算方式如下 * 績效為A,獎金乘以系數(shù)5 * 績效為B,獎金乘以系數(shù)4 * 績效為C,獎金乘以系數(shù)3 *///-------- 示例1 ----------var calculateBonus = function(performanceLevel, salary) { if(performanceLevel === 'A') {  return salary * 5; } if(performanceLevel === 'B') {  return salary * 4; } if(performanceLevel === 'C') {  return salary * 3; }};console.log(calculateBonus('A', 2000));/* 缺點:1、函數(shù)體系龐大,擁有太多的if-else語句;  2、如果增加績效D,需修改內(nèi)部函數(shù),違背封閉-開放原則;  3、復(fù)用性差,其他地方如果用到計算獎金,只能賦值黏貼; *///--------- 示例2 ------------var performanceA = function(salary) { return salary * 5;};var performanceB = function(salary) { return salary * 4;};var performanceC = function(salary) { return salary * 3;};var calculateBonus = function(performanceLevel, salary) { if(performanceLevel === 'A') {  return performanceA(salary); } if(performanceLevel === 'B') {  return performanceB(salary); } if(performanceLevel === 'C') {  return performanceC(salary); }};console.log(calculateBonus('A', 2000)); /* 缺點:1、函數(shù)體系龐大,系統(tǒng)變化時缺乏彈性 *///--------- 示例3 ------------// 策略模式重構(gòu):定義一系列算法,將它們一個個封裝起來。var performanceA = function(){};performanceA.prototype.caculate = function(salary){ return salary * 5;};var performanceB = function(){};performanceB.prototype.caculate = function(salary){ return salary * 4;};var performanceC = function(){};performanceC.prototype.caculate = function(salary){ return salary * 3;};var Bonus = function(){ this.salary = null; this.strategy = null;};Bonus.prototype.setSalary = function(salary){ this.salary = salary;};Bonus.prototype.setStrategy = function(strategy){ this.strategy = strategy;}Bonus.prototype.getBonus = function(){ return this.strategy.caculate(this.salary);}var bonus = new Bonus();bonus.setSalary(2000);bonus.setStrategy(new performanceA());console.log(bonus.getBonus());// ----------- 示例4 ---------------// javaScript版本var Strategies = { "A":function(salary){  return salary * 5; }, "B":function(salary){  return salary * 4; }, "C":function(salary){  return salary * 3; } };var caculateBonus = function(level,salary){ return Strategies[level](salary);};console.log(caculateBonus("A",2000));

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 九江市| 项城市| 北海市| 永宁县| 平南县| 金湖县| 金溪县| 布拖县| 灵宝市| 宜宾市| 禄丰县| 湖口县| 沙雅县| 资阳市| 定结县| 伊吾县| 林周县| 城步| 百色市| 洪湖市| 呼玛县| 广宗县| 齐河县| 昌乐县| 班戈县| 图木舒克市| 长葛市| 洛扎县| 白水县| 土默特右旗| 黑龙江省| 驻马店市| 蕉岭县| 宝鸡市| 松溪县| 佛教| 红河县| 顺昌县| 顺昌县| 灯塔市| 铜鼓县|