「JAVA言語で学ぶデザインパターン入門」をC#で書いてみた【TemplateMethodパターン】

「増補改訂版Java言語で学ぶデザインパターン入門」の「TemplateMethodパターン」をC#で書いてみました。

GitHubにもコードを置いています。

参考 DesignPattern【TemplateMethod】GitHub

コード


public abstract class AbstractDisplay
{
    public abstract void Open();
    public abstract void Print();
    public abstract void Close();
    public void Display()
    {
        Open();
        for(int i = 0; i < 5; i++)
        {
            Print();
        }
        Close();
    }
}

public class CharDisplay : AbstractDisplay
{
    private readonly char ch;
    public CharDisplay(char ch)
    {
        this.ch = ch;
    }

    public override void Close()
    {
        Console.WriteLine(">>");
    }

    public override void Open()
    {
        Console.Write("<<");
    }

    public override void Print()
    {
        Console.Write(ch);
    }
}

public class StringDisplay : AbstractDisplay
{
    private readonly string str;
    private readonly int width;
    public StringDisplay(string str)
    {
        this.str = str;
        this.width = Encoding.GetEncoding("Shift_JIS").GetByteCount(str);
    }

    public override void Close()
    {
        PrintLine();
    }

    public override void Open()
    {
        PrintLine();
    }

    public override void Print()
    {
        Console.WriteLine($"|{str}|");
    }

    private void PrintLine()
    {
        Console.Write("+");
        for (int i = 0; i < width; i++)
        {
            Console.Write("-");
        }
        Console.WriteLine("+");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
        AbstractDisplay d1 = new CharDisplay('H');
        AbstractDisplay d2 = new StringDisplay("Hello, world.");
        AbstractDisplay d3 = new StringDisplay("こんにちは。");
        d1.Display();
        d2.Display();
        d3.Display();
    }
}

実行結果は以下のようになります。

<<HHHHH>>
+-------------+
|Hello, world.|
|Hello, world.|
|Hello, world.|
|Hello, world.|
|Hello, world.|
+-------------+
+------------+
|こんにちは。|
|こんにちは。|
|こんにちは。|
|こんにちは。|
|こんにちは。|
+------------+

その他のデザインパターンは以下の記事から確認してください。

「JAVA言語で学ぶデザインパターン入門」をC#で書いてみた【一覧】

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA