• 策略是一种相对比较简单是设计模式,主要用在有多种状态或策略需要进行选择的时候,将所有选择封装在一起,只给外部暴露必要的接口
    • 举个例子:我们有一个表单,需要验证表单项,如果验证不通过就返回一个提示文案,这里我们可以使用策略模式的思路来封装 ```javascript // 策略模式 var formStrategy = (function () { var strategy = { notEmpty: function (value) {

      1. return value.length ? '' : '请填写内容'

      }, isNumber: function (value) {

      1. var reg = /^[0-9]+(.[0-9]+)?$/;
      2. return reg.test(value) ? '' : '请填写数字'

      }, isPhone: function (value) {

      1. // 010-12345678 0000-1234567
      2. var reg = /^\d{3}-\d{8}$|^\d{4}-\d{7}$/;
      3. return reg.test(value) ? '' : '请输入正确电话号码';

      } }

      return { validate: function (type, value) {

      1. value = value.replace(/^\s+|\s+$/g, '');
      2. return strategy[type] ? strategy[type](value) : '没有这个检查方法,请手动添加'

      }, addStrategy: function (type, fn) {

      1. if (strategy[type]) {
      2. return '这个方法已经存在'
      3. }
      4. strategy[type] = fn;

      } } })();

    window.onload = function() {

    formStrategy.addStrategy(‘isEmail’, function(value) { var reg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9]+(.[a-zA-Z0-9]+)+$/; return reg.test(value) ? ‘’ : ‘请输入正确的邮箱’; })

    var oInput = document.querySelector(‘input’); oInput.onchange = function() { var result; result = formStrategy.validate(‘notEmpty’, this.value) || formStrategy.validate(‘isNumber’, this.value) || formStrategy.validate(‘isPhone’, this.value); console.log(result); } } ```