デザインモード-テンプレート方法パターン(Template Method Pattern)

1966 ワード

定義
テンプレート方法モード(Template Method Pattern):動作中のアルゴリズムの骨格を定義し、これらのステップをサブクラスに遅延させる.テンプレート方法パターンは、サブクラスがアルゴリズムの構造を変えずに、アルゴリズムの特定のステップを再定義することができるようにする.
C〓〓の例
    /// 
    ///   
    /// 
    public abstract class AbstractClass
    {
        ///          
        protected abstract int _count();
        protected abstract int _add();
        /// 
        ///     ,      。
        /// 
        /// 
        public void Count(int input) {
            var result = this._count()*input+_add()-20;
            Console.WriteLine(result);
        }
    }
    /// 
    ///   10 +100
    /// 
    public class ConcreteClass10 : AbstractClass
    {
        protected override int _add()
        {
            return 100;
        }

        protected override int _count()
        {
            return 10;
        }
    }
    /// 
    ///   20 +2
    /// 
    public class ConcreteClass20 : AbstractClass
    {
        protected override int _add()
        {
            return 2;
        }

        protected override int _count()
        {
            return 20;
        }
        
    }
テンプレートメソッドの参加者:
  • AbstractClass:テンプレートを定義すると、サブクラスが定義をリセットします.countと_add操作
  • Concrete Class*:実現_countと_addは、アルゴリズム中の特定のサブクラスに関連するコンテンツを完成させる.
  • テンプレート方法モード適用状況:
  • は、アルゴリズムの不変部分を一度に実現し、可変挙動をサブクラスに残して実現する.
  • 各サブクラスにおける共通の挙動は、コードの重複を回避するために、1つの共通の親クラスに抽出されるべきである.
  • は、サブクラス拡張を制御する.テンプレート方法は特定の点だけで拡張できますが、テンプレート部分は安定しています.
  • テンプレート方法のパターンの特徴:
  • TemplateMethodモードは、オブジェクト指向システムにおいて、非常に基礎的な設計モードである.最も簡潔な機構(基礎、多状態)で多くのアプリケーションの枠組みに柔軟な拡張点を提供し、コード多重化に関する基本的な実現構造である.
  • は、具体的なインプリメンテーションにおいて、TemplateMethodによって呼び出された虚数の方法が実現されてもよく、また、実装されていなくてもよい(抽象的な方法または虚数の方法).しかし、一般的にはそれらをプロテックト法として設定することが推奨されています.
  • テンプレート方法モードは、サブクラスの拡張によって新たな挙動を増加させ、「開閉原則」に適合する.
  • その他
    ソースアドレス
    dotnet-design-patterns
    その他のデザインモード
    23種類の設計モード