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

JavaScript設計模式之策略模式詳解

 更新時間:2017年06月09日 10:17:44   作者:Stinchan  
這篇文章主要為大家詳細介紹了JavaScript設計模式之策略模式的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

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

/*
 * pre:策略模式
 * 示例:公司計算獎金,分A、B、C 三種績效,計算方式如下
 * 績效為A,獎金乘以系數5
 * 績效為B,獎金乘以系數4
 * 績效為C,獎金乘以系數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、函數體系龐大,擁有太多的if-else語句;
  2、如果增加績效D,需修改內部函數,違背封閉-開放原則;
  3、復用性差,其他地方如果用到計算獎金,只能賦值黏貼;
 */
//--------- 示例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、函數體系龐大,系統變化時缺乏彈性
 */
//--------- 示例3 ------------
// 策略模式重構:定義一系列算法,將它們一個個封裝起來。
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));

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • ES6箭頭函數和擴展實例分析

    ES6箭頭函數和擴展實例分析

    這篇文章主要介紹了ES6箭頭函數和擴展,結合實例形式分析了ES6箭頭函數和擴展基本功能、用法及操作注意事項,需要的朋友可以參考下
    2020-05-05
  • js菜單代碼js菜單特效代碼

    js菜單代碼js菜單特效代碼

    不用div+css實現的js菜單特效代碼用js+table實現 默認選中一個,點擊后 選中的項目“變白”。不用css+div 高手給做一下 多謝了 演示站:www.allss.com.cn 演示站使用css+div的 改成js+table的
    2008-01-01
  • JS文件/圖片從電腦里面拖拽到瀏覽器上傳文件/圖片

    JS文件/圖片從電腦里面拖拽到瀏覽器上傳文件/圖片

    這篇文章主要介紹了JS文件/圖片從電腦里面拖拽到瀏覽器上傳文件/圖片,需要的朋友可以參考下
    2017-03-03
  • 解決JS使用fill()進行數組填充遇到的問題

    解決JS使用fill()進行數組填充遇到的問題

    最近在做算法題時,遇到需要創(chuàng)建二維數組并進行初始化的情況,剛開始我使用的是 new Array(n).fill(new Array(n).fill('.')) 進行二維數組的初始化,但無論怎樣我都通不過測試用例,所以本文就給大家詳細的介紹了如何解決這類問題以及將js中的fill(方法重學一下
    2023-09-09
  • JavaScript優(yōu)化專題之Loading and Execution加載和運行

    JavaScript優(yōu)化專題之Loading and Execution加載和運行

    這篇文章主要介紹了JavaScript優(yōu)化專題中Loading and Execution加載和運行的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 實例淺析js的this

    實例淺析js的this

    本文通過做幾個簡單的對照實驗,根據這幾個對照實驗的結果,幫助大家理解js的this用法。下面就跟小編一起來看看吧
    2016-12-12
  • javascript自定義事件功能與用法實例分析

    javascript自定義事件功能與用法實例分析

    這篇文章主要介紹了javascript自定義事件功能與用法,結合實例形式較為詳細的分析了javascript自定義事件的原理、功能、應用與相關注意事項,需要的朋友可以參考下
    2017-11-11
  • 淺談js基礎數據類型和引用類型,深淺拷貝問題,以及內存分配問題

    淺談js基礎數據類型和引用類型,深淺拷貝問題,以及內存分配問題

    下面小編就為大家?guī)硪黄獪\談js基礎數據類型和引用類型,深淺拷貝問題,以及內存分配問題。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • JS不能跨域借助jquery獲取IP地址的方法

    JS不能跨域借助jquery獲取IP地址的方法

    JS不能跨域,所以這里借助了jquery,真的可以實現獲取IP地址,下面是示例代碼,需要的朋友可以參考下
    2014-08-08
  • 使用JS實現圖片展示瀑布流效果(簡單實例)

    使用JS實現圖片展示瀑布流效果(簡單實例)

    下面小編就為大家?guī)硪黄褂肑S實現圖片展示瀑布流效果(簡單實例)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09

最新評論