LeeeeeeM / blog

daily blog
0 stars 0 forks source link

设计模式记录---模板方法 #37

Open LeeeeeeM opened 5 years ago

LeeeeeeM commented 5 years ago

模板方法模式 这种主要用于一定流程的代码。 比如说Vue的整个初始化以及挂载过程。 有initState、initMethods、initComputed以及穿插在其中的各个钩子。

// 在涉及到多个类似的流程代码的时候,会抽象出公有代码。
// 比如js设计模式所提到的冲泡咖啡和泡茶的过程

// 1、烧开水
// 2、放入咖啡/茶叶
// 3、倒水
// 4、加入辅料

// 其中烧开水和倒水是公共方法可以抽象出来。
// 抽象出一个抽象类或者接口,作用就是让子类实现,本身不实现,抽象类方法执行报错
class DoDrink {
  boil() {
    throw new Error(`禁止调用抽象类烧水方法`)
  }
  pure() {
    throw new Error(`禁止调用抽象类倒水方法`)
  }
  init() {
    // 这是一个共有模板方法入口,必须实现。所以我们这个类并不是纯粹的抽象类
    this.boil()
    this.putIn()
    this.pure()
    this.putOther()
  }
} 

class DoTea extends DoDrink {
  putIn() {
     console.log(`把茶叶放进杯子`)
  }
  putOther() {
     console.log(`放入柚子`)
  }
}

class DoCoffee extends DoDrink {
  putIn() {
     console.log(`把咖啡放进杯子`)
  }
  putOther() {
     console.log(`放入牛奶`)
  }
}

var dotea = new DoDrink()
dotea.init()
var docoffee = new DoCoffee()
docoffee.init()
LeeeeeeM commented 5 years ago

职责链模式

这是一种涉及解耦合架构的常用方式