Typescript デザインパターン Template Method

Template Method

親クラスで処理の概要を決め、子クラスで具体的な処理を書くデザインパターン

親クラスは直接インスタンスを作成しないのでAbstractClassを使う。これを抽象クラスという

子クラスは具象クラス(ConcreteClass)という

プログラム

ソースコード

abstract_display.ts

export abstract class AbstractDisplay {
  abstract open(): void;
  abstract print(): void;
  abstract close(): void;

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

char_display.ts

import { AbstractDisplay } from './abstract_display';

export class CharDisplay extends AbstractDisplay {
    // typescriptにchar型はないのでstringで代用(1文字でない場合はエラーを起こす)
    private ch: string;

    constructor(ch: string) {
        super();
        if(ch.length != 1) {
            throw("CharDisplay: length is invalid.");
        }
        this.ch = ch;
    }

    public open(): void {
        console.log("<<");
    }

    public close(): void {
        console.log(">>");
    }

    public print(): void {
        console.log(this.ch);
    }
}

abstract_main.ts

import { AbstractDisplay } from './abstract_display';
import { CharDisplay } from './char_display';

const abstractFunc = () => {
  const d1: AbstractDisplay = new CharDisplay("A");

  d1.display();
}

export default abstractFunc;

出力

<<
A
A
A
A
A
>>

参考文献

www.te-nu.com