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 >>