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するだけですが、雰囲気は掴んでもらえるかなぁと思っています。