C#でデザインパターン「TemplateMethodパターン」

C# コンピュータ
C#

クラスが提供する機能(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);
    }
}

コメント