- 策略是一种相对比较简单是设计模式,主要用在有多种状态或策略需要进行选择的时候,将所有选择封装在一起,只给外部暴露必要的接口
举个例子:我们有一个表单,需要验证表单项,如果验证不通过就返回一个提示文案,这里我们可以使用策略模式的思路来封装 ```javascript // 策略模式 var formStrategy = (function () { var strategy = { notEmpty: function (value) {
return value.length ? '' : '请填写内容'
}, isNumber: function (value) {
var reg = /^[0-9]+(.[0-9]+)?$/;
return reg.test(value) ? '' : '请填写数字'
}, isPhone: function (value) {
// 010-12345678 0000-1234567
var reg = /^\d{3}-\d{8}$|^\d{4}-\d{7}$/;
return reg.test(value) ? '' : '请输入正确电话号码';
} }
return { validate: function (type, value) {
value = value.replace(/^\s+|\s+$/g, '');
return strategy[type] ? strategy[type](value) : '没有这个检查方法,请手动添加'
}, addStrategy: function (type, fn) {
if (strategy[type]) {
return '这个方法已经存在'
}
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); } } ```