# 第 16 章 策略模式

这边文章告诉你如何在弱类型语言上,优雅地声明变量。javascript

@(js设计模式)java

概念

  • 不一样策略分开处理
  • 避免出现大量 if...else 或者 switch...case
  • js 中未找到经典应用场景

示例

错误写法一

class User {
  constructor (user) {
    this.user = user
  }
  buy () {
    const user = this.user
    // 错误写法一
    if (user === 'vip') {
      console.log('会员购买')
    }
    if (user === 'normal') {
      console.log('普通的用户')
    }
    if (user === 'superVip') {
      console.log('超级会员')
    } 
  }
}

const vip = new User('vip')
vip.buy()
const normal = new User('normal')
normal.buy()
const superVip = new User('superVip')
superVip.buy()

错误写法二

class User {
  constructor (user) {
    this.user = user
  }
  buy () {
     const user = this.user
        switch (user) {
      case 'vip':
        console.log('会员购买')
        break;
      case 'normal':
        console.log('普通的用户')
        break;
      case 'superVip':
        console.log('超级会员')
        break;
      default:
        console.log('普通的用户')
        break;
    }
  }
}

const vip = new User('vip')
vip.buy()
const normal = new User('normal')
normal.buy()
const superVip = new User('superVip')
superVip.buy()

正确写法

按照多少个不一样的用户来分开多少个不一样策略设计模式

class Vip {
  buy() {
    console.log('会员购买')
  }
}
class Normal {
  buy() {
    console.log('普通的用户')
  }
}
class SuperVip {
  buy() {
    console.log('超级会员')
  }
}
const vip = new Vip()
vip.buy()
const normal = new Normal()
normal.buy()
const superVip = new SuperVip()
superVip.buy()

优化(推荐)优化

为何优化?一般状况下尽可能少声明类(简化也不要 开示例代码多少,要看实现代码应用多少)this

按照用户类型,用户购买内容分红两个策略设计

const UserType = {
  Vip: 'vip',
  Normal: 'normal',
  SuperVip: 'superVip'
}
const UserTypeName = {
  [UserType.Vip]: '会员购买',
  [UserType.SuperVip]: '超级会员',
  [UserType.Normal]: '普通的用户'
}

class User {
  constructor (user) {
    this.user = user
  }

  buy () {
    console.log(UserTypeName[this.user])
  }
}

const vip = new User(UserType.Vip)
vip.buy()
const normal = new User(UserType.Normal)
normal.buy()
const superVip = new User(UserType.SuperVip)
superVip.buy()
相关文章
相关标签/搜索