JavaScript设计模式——策略模式

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

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

核心

将算法的使用和算法的实现分离开来。

一个基于策略模式的程序至少由两部分组成:

第一个部分是一组策略类,策略类封装了具体的算法,并负责具体的计算过程。

第二个部分是环境类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')

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值