定义
定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。
核心
将算法的使用和算法的实现分离开来。
一个基于策略模式的程序至少由两部分组成:
第一个部分是一组策略类,策略类封装了具体的算法,并负责具体的计算过程。
第二个部分是环境类Context,Context接受客户的请求,随后把请求委托给某一个策略类。要做到这点,说明Context 中要维持对某个策略对象的引用。
优缺点
优点
可以有效地避免多重条件语句,将一系列方法封装起来也更直观,利于维护。
缺点
往往策略集会比较多,我们需要事先就了解定义好所有的情况。
实现
以表单验证为例
非策略模式的表单验证,不好维护且繁琐
function validator(value) {
if (!/\d+/.test(value)) {
console.log("请输入数字")
} else if (value === "" || !value) {
console.log("不可为空")
}
//else if
}
策略模式表单验证
let rules = {
isNumber: function (value) {
if (/\d+/.test(value)) {
console.log("isNumber验证通过")
} else {
console.log("请输入数字")
}
},
required: function (value) {
if (value === "" || !value) {
console.log("不可为空")
} else {
console.log("required验证通过")
}
},
}
function validator(value, rule) {
if (rules[rule]) {
rules[rule](value)
}
}
validator('123','isNumber')
结果:

本文介绍了策略模式的概念,如何将算法封装在策略类中,以及如何通过环境类Context实现策略的切换。讨论了其优点如代码清晰、易于维护,以及可能的缺点如需预先定义所有策略。以表单验证为例,对比了非策略模式和策略模式的实现方式。
79

被折叠的 条评论
为什么被折叠?



