区块链技术博客
www.b2bchain.cn

五、5. 策略模式求职学习资料

本文介绍了五、5. 策略模式求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

策略模式,是一种封装算法与规则的设计模式。

我们在学习封装的终极奥义时已经知道,封装就是提炼出来相同点,将不同点作为变量。

当不同点是一段逻辑、一个算法、一个规则时,我们就可以进一步将这个不同点进行封装。

这就是策略模式解决问题的思路。

计算员工奖金

公司里每位员工的奖金都不一样。

员工的奖金,由员工基本工资与员工等级相关。

奖金 = 基本工资 * 等级对应的倍数

  • A 级 -> 5 倍
  • B 级 -> 4 倍
  • C 级 -> 3 倍
  • D 级 -> 2 倍
  • E 级 -> 1 倍

于是,我们就可以封装一个计算奖金的方法如下

function getBouns(base, level) {   if (level == 'A') {     return base * 5   }   if (level == 'B') {     return base * 4   }   if (level == 'C') {     return base * 3   }   if (level == 'D') {     return base * 2   }   if (level == 'E') {     return base * 1   } }

有了这个方法,计算奖金就很简单

const p1 = {   name: '张三',   base: 1000,   level: 'A' } p1.bouns = getBouns(p1.base, p1.level)  console.log(p1)

这样封装虽然很简单,但是存在潜在的风险:奖金的计算方式,随时可能会改变

当奖金的计算方式发生了变化,新增了更多的员工等级,我们就不得不修改 getBouns 方法。

因此我们需要对该方法进行进一步的提炼,把该方法中的变量:奖金的计算方式提炼出来。这样,我们就不担心变量发生改变了。

此处,我们需要关注两个地方

  • 变量:奖金的计算方式,是一段逻辑,可以封装为一个函数
  • 奖金的计算方法:与员工等级是一对一的映射关系

因此,我们应该建立一个员工等级与奖金计算方式的隐射关系

const map = {   A: function(base) {     return base * 5   },   B: function (base) {     return base * 4   },   C: function (base) {     return base * 3   },   D: function (base) {     return base * 2   },   E: function (base) {     return base * 1   }, }

即使以后有所修改,我们只需要修改该配置文件或者配置表即可。

员工的奖金依据该配置进行计算

function getBouns(base, level) {   return map[level](base) }
const p2 = {   name: '李四',   base: 1200,   level: 'B' } p2.bouns = getBouns(p2.base, p2.level)  console.log(p2)

表单验证

表单验证是一个非常常见的案例,我们也可以使用策略模式来解决规则的验证问题。

借鉴 antdesign 的表单规则,假设我们从组建中,获取得到的字段数据与其对应的规则如下

“`js

策略模式,是一种封装算法与规则的设计模式。

我们在学习封装的终极奥义时已经知道,封装就是提炼出来相同点,将不同点作为变量。

当不同点是一段逻辑、一个算法、一个规则时,我们就可以进一步将这个不同点进行封装。

这就是策略模式解决问题的思路。

计算员工奖金

公司里每位员工的奖金都不一样。

员工的奖金,由员工基本工资与员工等级相关。

奖金 = 基本工资 * 等级对应的倍数

  • A 级 -> 5 倍
  • B 级 -> 4 倍
  • C 级 -> 3 倍
  • D 级 -> 2 倍
  • E 级 -> 1 倍

于是,我们就可以封装一个计算奖金的方法如下

function getBouns(base, level) {   if (level == 'A') {     return base * 5   }   if (level == 'B') {     return base * 4   }   if (level == 'C') {     return base * 3   }   if (level == 'D') {     return base * 2   }   if (level == 'E') {     return base * 1   } }

有了这个方法,计算奖金就很简单

const p1 = {   name: '张三',   base: 1000,   level: 'A' } p1.bouns = getBouns(p1.base, p1.level)  console.log(p1)

这样封装虽然很简单,但是存在潜在的风险:奖金的计算方式,随时可能会改变

当奖金的计算方式发生了变化,新增了更多的员工等级,我们就不得不修改 getBouns 方法。

因此我们需要对该方法进行进一步的提炼,把该方法中的变量:奖金的计算方式提炼出来。这样,我们就不担心变量发生改变了。

此处,我们需要关注两个地方

  • 变量:奖金的计算方式,是一段逻辑,可以封装为一个函数
  • 奖金的计算方法:与员工等级是一对一的映射关系

因此,我们应该建立一个员工等级与奖金计算方式的隐射关系

const map = {   A: function(base) {     return base * 5   },   B: function (base) {     return base * 4   },   C: function (base) {     return base * 3   },   D: function (base) {     return base * 2   },   E: function (base) {     return base * 1   }, }

即使以后有所修改,我们只需要修改该配置文件或者配置表即可。

员工的奖金依据该配置进行计算

function getBouns(base, level) {   return map[level](base) }
const p2 = {   name: '李四',   base: 1200,   level: 'B' } p2.bouns = getBouns(p2.base, p2.level)  console.log(p2)

表单验证

表单验证是一个非常常见的案例,我们也可以使用策略模式来解决规则的验证问题。

借鉴 antdesign 的表单规则,假设我们从组建中,获取得到的字段数据与其对应的规则如下

“`js

策略模式,是一种封装算法与规则的设计模式。

我们在学习封装的终极奥义时已经知道,封装就是提炼出来相同点,将不同点作为变量。

当不同点是一段逻辑、一个算法、一个规则时,我们就可以进一步将这个不同点进行封装。

这就是策略模式解决问题的思路。

计算员工奖金

公司里每位员工的奖金都不一样。

员工的奖金,由员工基本工资与员工等级相关。

奖金 = 基本工资 * 等级对应的倍数

  • A 级 -> 5 倍
  • B 级 -> 4 倍
  • C 级 -> 3 倍
  • D 级 -> 2 倍
  • E 级 -> 1 倍

于是,我们就可以封装一个计算奖金的方法如下

function getBouns(base, level) {   if (level == 'A') {     return base * 5   }   if (level == 'B') {     return base * 4   }   if (level == 'C') {     return base * 3   }   if (level == 'D') {     return base * 2   }   if (level == 'E') {     return base * 1   } }

有了这个方法,计算奖金就很简单

const p1 = {   name: '张三',   base: 1000,   level: 'A' } p1.bouns = getBouns(p1.base, p1.level)  console.log(p1)

这样封装虽然很简单,但是存在潜在的风险:奖金的计算方式,随时可能会改变

当奖金的计算方式发生了变化,新增了更多的员工等级,我们就不得不修改 getBouns 方法。

因此我们需要对该方法进行进一步的提炼,把该方法中的变量:奖金的计算方式提炼出来。这样,我们就不担心变量发生改变了。

此处,我们需要关注两个地方

  • 变量:奖金的计算方式,是一段逻辑,可以封装为一个函数
  • 奖金的计算方法:与员工等级是一对一的映射关系

因此,我们应该建立一个员工等级与奖金计算方式的隐射关系

const map = {   A: function(base) {     return base * 5   },   B: function (base) {     return base * 4   },   C: function (base) {     return base * 3   },   D: function (base) {     return base * 2   },   E: function (base) {     return base * 1   }, }

即使以后有所修改,我们只需要修改该配置文件或者配置表即可。

员工的奖金依据该配置进行计算

function getBouns(base, level) {   return map[level](base) }
const p2 = {   name: '李四',   base: 1200,   level: 'B' } p2.bouns = getBouns(p2.base, p2.level)  console.log(p2)

表单验证

表单验证是一个非常常见的案例,我们也可以使用策略模式来解决规则的验证问题。

借鉴 antdesign 的表单规则,假设我们从组建中,获取得到的字段数据与其对应的规则如下

“`js

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 五、5. 策略模式求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们