ES2015でTemplateMethodもどき

ES2015はclassベースの構文が導入されています。
これを上手いこと使えばTemplateMethodっぽいことが出来るかなーと思って試してみました。

class AbstractDisplay {
  open() {
    throw new Error('a subclass have to override this open method.')
  }

  print() {
    throw new Error('a subclass have to override this print method.')
  }

  close() {
    throw new Error('a subclass have to override this close method.')
  }

  display() {
    this.open()
    for (let i = 0; i < 5; i++) {
      this.print()
    }
    this.close()
  }
}

class CharDisplay extends AbstractDisplay {
  constructor() {
    super()
  }
  open() {
    console.log('open')
  }
  print() {
    console.log('Hello World')
  }
  close() {
    console.log('close')
  }
}

const char = new CharDisplay()
char.display()

AbstractDisplayで処理の枠組みを定めておき、AbstractDisplayを継承したサブクラスで具体的内容を定義するようにします。
この例では、サブクラスではopen, print, closeをオーバライドすることを期待しています。

単にconsole.logするだけですが、雰囲気は掴んでもらえるかなぁと思っています。