2026-07-02 05:55:40
策略模式在JavaScript中通过封装可互换的算法或规则,解决多分支条件逻辑的维护难题,尤其适用于业务中存在多种相似但行为不同的场景。 以下是具体应用方式及示例:
一、核心思想与实现方式将每个验证规则封装为独立函数,组织在策略对象中:
const validationRules = { required: (value) => !!value.trim(), // 必填校验 email: (value) => /S+@S+.S+/.test(value), // 邮箱格式校验 phone: (value) => /^1[3-9]d{9}$/.test(value) // 手机号校验};2. 通用校验函数编写校验函数,接收字段值和策略名称,动态调用对应策略:
function validate(value, strategy) { if (!validationRules[strategy]) { throw new Error(`不支持的校验策略: ${strategy}`); } return validationRules[strategy](value);}3. 调用示例validate("john", "required"); // truevalidate("john@example.com", "email"); // truevalidate("13812345678", "phone"); // true三、扩展性与可维护性优势通过配置决定使用哪些策略,实现校验流程的配置化:
const formConfig = [ { name: "username", rules: ["required"] }, { name: "email", rules: ["required", "email"] }, { name: "phone", rules: ["phone"] }];// 遍历配置执行校验function validateForm(formData, config) { const errors = {}; config.forEach(({ name, rules }) => { rules.forEach((rule) => { if (!validate(formData[name], rule)) { errors[name] = errors[name] || []; errors[name].push(`字段 ${name} 未通过 ${rule} 校验`); } }); }); return errors;}五、适用场景与优势总结解耦:算法定义与使用分离,降低代码耦合度。
可扩展:新增策略无需修改现有代码,符合开闭原则。
可维护:避免多分支条件判断,逻辑更清晰。
灵活组合:可动态组合多个策略(如同时校验必填和邮箱格式)。
策略模式通过分离变化点,使业务逻辑更清晰、灵活,是处理多分支条件判断的优雅解决方案。