第5章 策略模式

第二部分 设计模式

第5章 策略模式

定义:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。

其实就是定义一系列的算法,把他们各自封装成策略类,算法被封装在策略类内部的方法里。在对Context发起请求的时候,Context总是把请求委托给这些策略对象中间的某一个进行计算。

5.1 使用策略模式计算奖金

	/**
	 * 使用策略模式计算奖金
	 * S 4个月奖金
	 * A 3个月奖金
	 * B 2个月奖金
	 */
	
	//1、最原始实现方式
	//缺点:
	//(1)calculate函数比较庞大,包含了很多判断语句,这些语句必须包含所有的逻辑分支
	//(2)函数缺乏弹性,如果增加了新的绩效等级,或者想把绩效等级的奖金系数修改一下,我们必须深入calculate函数内部实
	//现违反了开放-封闭原则
	//算法的复用性差,如果在程序的其它地方用到这些算法,我们只能复制粘帖
	var calculateBonus = function(performanceLevel, salary){
		switch(performanceLevel){
			case 'S':
			return salary*4
			break
			case 'A':
			return salary*3
			break
			case 'B':
			return salary*2
			break
			default:
			return salary
			break
		}
	}
	console.log(calculateBonus('A',10000))

 

  

	//2、使用组合函数重构代码
	//优点:(1)把各种算法封装到一个个的小函数里,可以一目了然的知道对应的哪种算法
	//(2)复用性强
	//缺点:calculateBouns函数会越来越庞大,在系统变化的时候缺乏弹性
	var performanceS = function(salary){
		return salary*4
	}
	var performanceA = function(salary){
		return salary*3
	}
	var performanceB = function(salary){
		return salary*2
	}

	var calculateBonus = function(performanceLevel, salary){
		switch(performanceLevel){
			case 'S':
			return performanceS(salary)
			break
			case 'A':
			return performanceA(salary)
			break
			case 'B':
			return performanceB(salary)
			break
		}
	}
	console.log(calculateBonus('B',10000))

  

 

猜你喜欢

转载自www.cnblogs.com/huyanluanyu/p/9984623.html