Template Methodパターン

Templateの意味

  • 「雛型」

Template Methodパターンとは

  • アルゴリズムの不変な部分だけをスーパークラスで定義し、(ここが『テンプレート』の役割)、可変な部分の具体的な実装はサブクラスで行う。
  • こうすると、それぞれで重複する処理を実装しなくてよい。
  • サブクラスは、自分に関わる処理だけに専念できる。
  • 新しいパターンの追加が楽。

クラス図

ソース

  • ≪実装モデル≫
namespace TempleteMethod
{
    //スーパークラス
    public abstract class CaffeineBeverage
    {
        protected StringBuilder _recipe = new StringBuilder();

        public StringBuilder PrepareRecipe()
        {
            this.boilwater();
            this.brew();
            this.pourInCup();
            this.addCondiments();

            return this._recipe;
        }

        private void boilwater()
        {
            this._recipe.AppendLine("お湯を沸かします。/");
        }

        protected abstract void brew();

        private void pourInCup()
        {
            this._recipe.AppendLine("カップに注ぎます。/");
        }

        protected abstract void addCondiments();
    }

    //サブクラス:コーヒー
    public class Coffee : CaffeineBeverage
    {
        protected override void brew()
        {
            this._recipe.AppendLine("フィルタでコーヒーをドリップします。/");
                

        protected override void addCondiments()
        {
            this._recipe.AppendLine("砂糖とミルクを追加します。/");
        }
    }

    //サブクラス:紅茶
    public class Tea : CaffeineBeverage
    {
        public Tea() { }

        protected override void brew()
        {
            this._recipe.AppendLine("紅茶を浸します。/");
        }

        protected override void addCondiments()
        {
            this._recipe.AppendLine("レモンを追加します。/");
        }
    }
}

実行結果

感想

  • stringは文字列の配列。charは1文字の配列。デザパタと関係ないけど