JavaScript中的策略模式

268 阅读1分钟

介绍

※ 不同策略分开处理

※ 避免出现大量 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()

设计原则

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

● 符合开放封闭原则