博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模式学习(六)--- 策略模式
阅读量:5122 次
发布时间:2019-06-13

本文共 2513 字,大约阅读时间需要 8 分钟。

var validator = {        // 所有可用的检查类型        types : {},        // 在当前验证绘画中的错误消息        message : [],        // 当前验证配置        config : {},        // 接口方法        validate : function(data){            var i, msg, type, checker, result_ok;            // 重置所有消息            this.message = [];            for(i in data){                if(data.hasOwnProperty(i)){                    type = this.config[i];                    console.log("types are:",this.types)                    checker = this.types[type];// 每种检查的方法                    if(!type){                        continue;// type不存在则跳出本次循环                    }                    if(!checker){
// 要是不存在检查方法抛出错误 throw{ name : "ValidationError", message : "No handler to validate type" + type }; } result_ok = checker.validate(data[i]);// 检查的返回结果 : true false false if(!result_ok){ msg = "Invalid value for *" + i + "*, " + checker.instructions; this.message.push(msg); } } } return this.hasError(); }, // 帮助程序 hasError : function(){ return this.message.length !== 0; } }; // validator 配置 validator.config = { first_name : 'isNonEmpty', age : 'isNumber', username : 'isAlphaNum' }; // validator的各种检查 // 非空值得检查 validator.types.isNonEmpty = { validate : function(value){ return value !== ""; }, instructions : "the value cannot be empty" }; // 检查是否是一个数字 validator.types.isNumber = { validate : function(value){ return !isNaN(value) }, instructions : "the value can only be a valid number, e.g. 1, 3.14 or 2010" }; // 检查该值是否只包含字母和数字 validator.types.isAlphaNum = { validate : function(value){ return !/[^a-z0-9]/i.test(value);// i : 表示不区分大小写 }, instructions : "the value can only contain characters and numbers, no special symbols" }; var data = { first_name : "Super", last_name : "Man", age : "unknown", username : "o_0" }; validator.validate(data);// 验证 if(validator.hasError()){
// 如果有错误, 输出 console.log(validator.message.join("\n")); }

策略模式支持在运行时选择算法。上面是使用策略模式解决表单验证的问题。

转载于:https://www.cnblogs.com/chuyu/p/3492924.html

你可能感兴趣的文章
Java同步锁——lock与synchronized 的区别【转】
查看>>
洛谷-校门外的树-数组
查看>>
Python--网络编程-----文件传输简单版本
查看>>
CF 208E. Blood Cousins [dsu on tree 倍增]
查看>>
趣谈面试(一)
查看>>
Quart2D setNeedsDisplay
查看>>
设计模式之策略设计模式
查看>>
Sql server 从一个表中获取数据更新到另一个表中
查看>>
JS继承的实现方式 原型 原型链 prototype和_proto_的区别
查看>>
[bzoj3622] 已经没有什么好害怕的了
查看>>
Objective-c 中 nil, Nil, NULL和NSNull的区别
查看>>
解决Ubuntu编译内核uImage出现问题“mkimage” command not found - U-Boot
查看>>
NOIP2018退役记
查看>>
Oracle 11g Release 1 (11.1) SQL_层级查询(概)
查看>>
第三次作业-功能测试
查看>>
(C++)浅谈using namespace std
查看>>
Http协议与生命周期
查看>>
Filter过滤器
查看>>
HTML5新标签在低版本浏览器中兼容性Checklist (hacks and issues)
查看>>
Laravel框架使用的一些注意细节(一)
查看>>