策略模式(Strategy Pattern)是一种行为设计模式,它允许你定义一系列算法,并将每个算法封装起来,使它们可以互换。策略模式让算法独立于使用它的客户端而变化。
策略模式通常分为两类:
class ValidationStrategy {
validate(value) {
throw new Error('validate method must be implemented');
}
}
class RequiredValidation extends ValidationStrategy {
validate(value) {
return value ? true : 'This field is required';
}
}
class EmailValidation extends ValidationStrategy {
validate(value) {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(value) ? true : 'Invalid email format';
}
}
class MinLengthValidation extends ValidationStrategy {
constructor(minLength) {
super();
this.minLength = minLength;
}
validate(value) {
return value.length >= this.minLength ? true : `Minimum length is ${this.minLength}`;
}
}
class Validator {
constructor() {
this.strategy = null;
}
setStrategy(strategy) {
this.strategy = strategy;
}
validate(value) {
if (!this.strategy) {
throw new Error('No validation strategy set');
}
return this.strategy.validate(value);
}
}
const validator = new Validator();
// 验证必填字段
validator.setStrategy(new RequiredValidation());
console.log(validator.validate('')); // 输出: This field is required
console.log(validator.validate('some value')); // 输出: true
// 验证邮箱格式
validator.setStrategy(new EmailValidation());
console.log(validator.validate('test@example.com')); // 输出: true
console.log(validator.validate('invalid-email')); // 输出: Invalid email format
// 验证最小长度
validator.setStrategy(new MinLengthValidation(5));
console.log(validator.validate('abc')); // 输出: Minimum length is 5
console.log(validator.validate('abcdef')); // 输出: true
通过使用策略模式,可以有效地管理和扩展表单验证逻辑,使代码更加清晰和易于维护。
领取专属 10元无门槛券
手把手带您无忧上云