zhangdizhangdi

模板方法模式 📖

定义

模板方法模式(Template Method Pattern),一种只需使用继承就可以实现的非常简单的模式。模板方法模式由两部分结构组成,第一部分是抽象父类,第二部分是具体的实现子类。通常在抽象父类中封装了子类的算法框架,包括实现一些公共方法以及封装子类中所有方法的执行顺序。子类通过继承这个抽象类,也继承了整个算法结构,并且可以选择重写父类的方法。

好莱坞原则

允许底层组件将自己挂钩到高层组件中,而高层组件会决定什么时候、以何种方式去使用这些底层组件,高层组件对待底层组件的方式,是“别调用我们,我们会调用你”。

实现

js
class Datastore {
  connect() {
    throw new Error('子类必须重写')
  }
  select() {
    throw new Error('子类必须重写')
  }
  disconnect() {
    throw new Error('子类必须重写')
  }
  process() {
    this.connect()
    this.select()
    this.disconnect()
    return true
  }
}

class MySQL extends Datastore {
  constructor() {
    super()
  }
  connect() {
    console.log('MySQL: connect step')
  }
  select() {
    console.log('MySQL: select step')
  }
  disconnect() {
    console.log('MySQL: disconnect step')
  }
}

class Mongodb extends Datastore {
  constructor() {
    super()
  }
  connect() {
    console.log('Mongdb: connect step')
  }
  select() {
    console.log('Mongdb: select step')
  }
  disconnect() {
    console.log('Mongdb: disconnect step')
  }
}

const mySql = new MySQL()
mySql.process()

const mongodb = new Mongodb()
mongodb.process()
执行结果
MySQL: connect step
MySQL: select step
MySQL: disconnect step
Mongdb: connect step
Mongdb: select step
Mongdb: disconnect step

参考