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

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

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


参考
DesignPattern【Bridge】GitHub

コード


public class Display
{
    private DisplayImpl impl;
    public Display(DisplayImpl impl)
    {
        this.impl = impl;
    }

    public void Open()
    {
        impl.RawOpen();
    }

    public void Print()
    {
        impl.RawPrint();
    }

    public void Close()
    {
        impl.RawClose();
    }

    public void DisplayShow()
    {
        Open();
        Print();
        Close();
    }
}

public class CountDisplay : Display
{
    public CountDisplay(DisplayImpl impl) : base(impl)
    {
    }

    public void MultiDisplay(int times)
    {
        Open();
        for (int i = 0; i  times; i++)
        {
            Print();
        }
        Close();
    }
}

public abstract class DisplayImpl
{
    public abstract void RawOpen();
    public abstract void RawPrint();
    public abstract void RawClose();
}

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

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

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

    public override void RawPrint()
    {
        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);

        Display d1 = new Display(new StringDisplayImpl("Hello, Japan."));
        Display d2 = new CountDisplay(new StringDisplayImpl("Hello, World."));
        CountDisplay d3 = new CountDisplay(new StringDisplayImpl("Hello, Universe."));
        d1.DisplayShow();
        d2.DisplayShow();
        d3.DisplayShow();
        d3.MultiDisplay(5);
    }
}

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

+-------------+
|Hello, Japan.|
+-------------+
+-------------+
|Hello, World.|
+-------------+
+----------------+
|Hello, Universe.|
+----------------+
+----------------+
|Hello, Universe.|
|Hello, Universe.|
|Hello, Universe.|
|Hello, Universe.|
|Hello, Universe.|
+----------------+

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

コメントを残す

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

CAPTCHA