介绍
※ 不同策略分开处理
※ 避免出现大量 if...else 或者 switch...case
实现代码(ES6)
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 用户购买')
}
}
}
//测试代码
let u1 = new User('ordinary');
u1.buy()
let u2 = new User('member');
u2.buy()
let u3 = new User('vip');
u3.buy()
//----------------------------------------------------------------------------------->
//修改后
class OrdinaryUser{
buy(){
console.log('普通用户购买')
}
}
class MemberUser{
buy(){
console.log('会员用户购买')
}
}
class VipUser{
buy(){
console.log('vip 用户购买')
}
}
let u1 = new OrdinaryUser()
u1.buy()
let u2 = new MemberUser()
u2.buy()
let u3 = new VipUser()
u3.buy()
设计原则
● 不同策略,分开处理,而不是混合在一起
● 符合开放封闭原则