Template Methodパターン
Template Method
振る舞いに関するデザインパターン。
スーパークラスで処理手順を決定。
サブクラスで各処理を実装。
例:丼物
丼物をスーパークラスとする。
丼物を作成する流れ(処理手順)は以下
- ご飯を炊く
- トッピングを料理
- ご飯を盛る
- トッピングを乗せる
以上より、各処理と作成は以下のように定義できる。
public abstract class DonMono
{
public abstract void CookRice();
public abstract void CookTopping();
public abstract void ServeRice();
public abstract void GarnishTopping();
public void Make()
{
this.CookRice();
this.CookTopping();
this.ServeRice();
this.GarnishTopping();
}
}
牛丼
牛丼は丼物のサブクラスで以下の用に定義できる。
public class GyuDon : DonMono
{
public override void CookRice() => System.Console.WriteLine("固めで炊く");
public override void CookTopping() => System.Console.WriteLine("牛肉と玉ねぎを煮込む");
public override void ServeRice() => System.Console.WriteLine("ご飯を盛り付ける");
public override void GarnishTopping() => System.Console.WriteLine("牛肉を盛り付ける");
}
かつ丼
かつ丼も丼物のサブクラスで以下のように定義できる。
public class KatsuDon : DonMono
{
public override void CookRice() => System.Console.WriteLine("普通に炊く");
public override void CookTopping() => System.Console.WriteLine("豚肉を揚げる");
public override void ServeRice() => System.Console.WriteLine("ご飯を盛り付ける");
public override void GarnishTopping() => System.Console.WriteLine("とんかつを盛り付ける");
}
提供
public void Main(string[] args)
{
DonMono donMono = new KatsuDon();
donMono.Make();
donMono = new GyuDon();
donMono.Make();
}