クラスが提供する機能(TemplateMethod)を実現するため、その実装の一部をサブクラスに任せることで、コードの柔軟性と再利用性を高めるパターン
ウィキペディアのTemplateMethodパターンのページ
![]()
Template Method パターン - Wikipedia
サンプルコード
/// <summary>
/// TemplateMethodパターンのサンプルコード
/// </summary>
public enum Greeting
{
Hello,
Bye,
}
abstract class Parson
{
public void Say(Greeting w)
{
switch (w)
{
case Greeting.Hello:
hello();
break;
case Greeting.Bye:
bye();
break;
default:
throw new ArgumentOutOfRangeException("未対応");
}
}
protected abstract void hello();
protected abstract void bye();
}
class EnglishSpeaker : Parson
{
protected override void hello()
{
Console.WriteLine("Hello");
}
protected override void bye()
{
Console.WriteLine("Bye");
}
}
class JapaneseSpeaker : Parson
{
protected override void hello()
{
Console.WriteLine("こんにちは");
}
protected override void bye()
{
Console.WriteLine("さようなら");
}
}
class Program
{
static void Main()
{
Parson e = new EnglishSpeaker();
Parson j = new JapaneseSpeaker();
e.Say(Greeting.Hello);
j.Say(Greeting.Hello);
e.Say(Greeting.Bye);
j.Say(Greeting.Bye);
}
}
コメント