
十二、策略模式(2021/4/28)
发布日期:2021-05-07 05:41:06
浏览次数:17
分类:精选文章
本文共 1732 字,大约阅读时间需要 5 分钟。
策略模式的定义
- 定义一系列的算法把他们封装起来并且他们之间可以相互替换
- 核心:将算法的使用和算法的实现分离开来
案例:
#需求年底奖金发放:
绩效为S的人年终奖有4倍工资, 绩效为A的人年终奖有3倍工资, 绩效为B的人年终奖是2倍工资。以前的写法:
var calculate = function(level,salary){ if(level == 'S'){ return salary * 4 } if(level == 'A'){ return salary * 3 } if(level == 'B'){ return salary * 2 } // 如果再扩展,还要往下写很多一样的代码 // 缺乏弹性}console.log(calculate('S',20000));
策略模式的写法(把变化的和不变化的分开来)
var pS = function (){ }pS.prototype.calculate = function(salary){ return salary * 4}var pA = function (){ }pA.prototype.calculate = function(salary){ return salary * 3}var pB = function (){ }pB.prototype.calculate = function(salary){ return salary * 2}var Bouns = function(){ this.salary = null //初始的薪水 this.strategy = null //绩效等级的策略对象}Bouns.prototype.setSalary = function(salary){ this.salary = salary}Bouns.prototype.setStrategy = function(strategy){ this.strategy = strategy //这里很巧妙,把一个等级的对象传入,使得this.strategy = 等级函数创建的对象,所以this.strategy 可以使用等级函数对象 的calculate()函数}Bouns.prototype.getBouns = function(){ return this.strategy.calculate(this.salary) //所以this.strategy 可以使用等级函数对象 的calculate()函数}var bouns = new Bouns()bouns.setSalary(10000);bouns.setStrategy(new pS)console.log(bouns.getBouns())
换成函数也是对象的写法:
var strategies = { "S":function(salary){ return salary * 4 }, "A":function(salary){ return salary * 3 }, "B":function(salary){ return salary * 2 },}var getBouns = function(level,salary){ return strategies[level](salary)}console.log(getBouns('S',10000))
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年03月29日 12时54分57秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
取消vim打开文件全是黄色方法
2019-03-05
一个系统部署多个tomcat实例
2019-03-05
HP服务器设置iLO
2019-03-05
从头实现一个WPF条形图
2019-03-05
使用QT实现一个简单的登陆对话框(纯代码实现C++)
2019-03-05
QT :warning LNK4042: 对象被多次指定;已忽略多余的指定
2019-03-05
GLFW 源码 下载-编译-使用/GLAD配置
2019-03-05
针对单个网站的渗透思路
2019-03-05
Typescript 学习笔记六:接口
2019-03-05
02、MySQL—数据库基本操作
2019-03-05
OpenJDK1.8.0 源码解析————HashMap的实现(一)
2019-03-05
MySQL-时区导致的时间前后端不一致
2019-03-05
2021-04-05阅读小笔记:局部性原理
2019-03-05
go语言简单介绍,增强了解
2019-03-05
python file文件操作--内置对象open
2019-03-05
架构师入门:搭建基本的Eureka架构(从项目里抽取)
2019-03-05
MongoDB 快速扫盲贴
2019-03-05
EXTJS4.2——10.Tab+Iframe
2019-03-05
one + two = 3
2019-03-05
sctf_2019_easy_heap
2019-03-06