策略模式:不同策略分开处理,避免出现大量 if...else 或者 switch...case


 




class User {
constructor(type) {
this.type = type;
}
buy() {
if (this.type === 'ordinary') {
console.log('普通用户购买');
} else if (this.type === 'member') {
console.log('会员用户购买');
} else if (this.type === 'vip') {
console.log('vip 用户购买');
}
}
}

// 测试
var u1 = new User('ordinary');
u1.buy();
var u2 = new User('member');
u2.buy();
var u3 = new User('vip');
u3.buy();


这里可能有大量的 if...else。功能肯定没有问题,设计模式的存在不是解决bug,是提高设计能力,提高拓展性的


 




class OrdinaryUser {
buy() {
console.log('普通用户购买');
}
}

class MemberUser {
buy() {
console.log('会员用户购买');
}
}

class VipUser {
buy() {
console.log('vip 用户购买');
}
}

// 测试
var u1 = new OrdinaryUser();
u1.buy();
var u2 = new MemberUser();
u2.buy();
var u3 = new VipUser();
u3.buy();


这里针对不同的用户,不同的类




设计原则验证


不同策略,分开处理,而不是混合在一块


符合开放封闭原则