Quantcast
Channel: 飞长's Blog » pattern
Viewing all articles
Browse latest Browse all 2

【JavaScript设计模式系列】之策略模式

$
0
0

策略模式可以使程序在运行期间去选择算法。客户端始终调用暴露出的统一接口,但是可以根据不同的需求去调用不同的算法逻辑。
表单验证可以很好的解释什么是策略模式。
下面是基本实现代码:

var validator = {
	types: {},

	messages: [],

	config: {},
	
	validate: function(data){
		var i, msg, type, cheaker, result;
		
		this.messages = [];
		
		for(i in data){
			if(data.hasOwnProperty(i)){
				type = this.config[i];
				cheaker = this.types[type];
			}
			if(!type){
				continue;
			}
			if(!cheaker){
				throw {
					name: 'ValidationError',
					message: 'No handler to valide type' + type
				}
			}
			
			result = cheaker.validate(data[i]);
			if(!result){
				var msg = i + "中数据无效," + cheaker.instruction;
				this.messages.push(msg);
			}
		}
		return this.hasErrors();
	},
	hasErrors: function(){
		return this.messages.length !== 0;
	}
}


validator.config = {
	name: 'isNonEmpty',
	age: 'isNumber'
}

validator.types.isNonEmpty = {
	validate: function(value){
		return value !== '';
	}
}

validator.types.isNumber = {
	validate: function(value){
		return !isNaN(value);
	},
	instruction: "必须为数字,如'1234'"
}

var data = {
	name: 'feichang',
	age: 'fff'
}

validator.validate(data);
if(validator.hasErrors()){
	console.log('msg:' + validator.messages.join('/n'));
}

根据数据的类型在validator.config中去配置所需要的验证算法就可以完成验证。


Viewing all articles
Browse latest Browse all 2

Trending Articles