Unity学習ノート:設計モード-TEMPLATE METHOD(テンプレート方法)
キーワード(スケルトン)
機能実装の大きなプロセスは決定されていますが、各ステップには異なる実装がある場合があります.親クラスで定義されたプロセス(スケルトン)サブクラスは、各ステップの具体的な実装を担当します.(eg:団建活動:宿泊会議固定、娯楽活動自由選択)
意図:
操作中のアルゴリズムのスケルトンを定義し、いくつかのステップをサブクラスに遅延します.TemplateMethodは、サブクラスがアルゴリズムの構造を変更することなく、アルゴリズムの特定のステップを再定義できるようにする.
適用:
•アルゴリズムの不変の部分を一度に実装し、可変な動作をサブクラスに残して実装します.
•コードの重複を回避するために、各サブクラスの共通の動作を抽出し、共通の親にセットする必要があります.これは,O p d y k eとJ o h n s o nが記述した「一般化のための再分解」の良い例[O J 9 3]である.まず認識する
既存のコードの違いは、異なる点を新しい操作に分離します.最後に、これらの異なるコードを、これらの新しい操作を呼び出すテンプレートメソッドで置き換えます.
•サブクラス拡張を制御します.テンプレートメソッドは、特定のポイントでのみ「h o o k」アクション(効果のセクションを参照)を呼び出し、これらのポイントでのみ拡張を許可します.
ケース:(eg:団建活動:宿泊会議固定、娯楽活動自由選択)
機能実装の大きなプロセスは決定されていますが、各ステップには異なる実装がある場合があります.親クラスで定義されたプロセス(スケルトン)サブクラスは、各ステップの具体的な実装を担当します.(eg:団建活動:宿泊会議固定、娯楽活動自由選択)
意図:
操作中のアルゴリズムのスケルトンを定義し、いくつかのステップをサブクラスに遅延します.TemplateMethodは、サブクラスがアルゴリズムの構造を変更することなく、アルゴリズムの特定のステップを再定義できるようにする.
適用:
•アルゴリズムの不変の部分を一度に実装し、可変な動作をサブクラスに残して実装します.
•コードの重複を回避するために、各サブクラスの共通の動作を抽出し、共通の親にセットする必要があります.これは,O p d y k eとJ o h n s o nが記述した「一般化のための再分解」の良い例[O J 9 3]である.まず認識する
既存のコードの違いは、異なる点を新しい操作に分離します.最後に、これらの異なるコードを、これらの新しい操作を呼び出すテンプレートメソッドで置き換えます.
•サブクラス拡張を制御します.テンプレートメソッドは、特定のポイントでのみ「h o o k」アクション(効果のセクションを参照)を呼び出し、これらのポイントでのみ拡張を許可します.
ケース:(eg:団建活動:宿泊会議固定、娯楽活動自由選択)
namespace TemplateMethod_DesignPattern
{
using System;
class Algorithm
{
public void DoAlgorithm()
{
Console.WriteLine("In DoAlgorithm");
// do some part of the algorithm here
// step1 goes here
Console.WriteLine("In Algorithm - DoAlgoStep1");
// . . .
// step 2 goes here
Console.WriteLine("In Algorithm - DoAlgoStep2");
// . . .
// Now call configurable/replacable part
DoAlgoStep3();
// step 4 goes here
Console.WriteLine("In Algorithm - DoAlgoStep4");
// . . .
// Now call next configurable part
DoAlgoStep5();
}
virtual public void DoAlgoStep3()
{
Console.WriteLine("In Algorithm - DoAlgoStep3");
}
virtual public void DoAlgoStep5()
{
Console.WriteLine("In Algorithm - DoAlgoStep5");
}
}
class CustomAlgorithm : Algorithm
{
public override void DoAlgoStep3()
{
Console.WriteLine("In CustomAlgorithm - DoAlgoStep3");
}
public override void DoAlgoStep5()
{
Console.WriteLine("In CustomAlgorithm - DoAlgoStep5");
}
}
///
/// Summary description for Client.
///
public class Client
{
public static int Main(string[] args)
{
CustomAlgorithm c = new CustomAlgorithm();
c.DoAlgorithm();
return 0;
}
}
}