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

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

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

参考 DesignPattern【Adapter】GitHub 参考 DesignPattern【Adapter2】GitHub

コード(継承を使った場合)


public interface IAggregate
{
    IIterator Iterator();
}

public class Banner
{
    private readonly string str;
    public Banner(string str)
    {
        this.str = str;
    }

    public void ShowWithParen()
    {
        Console.WriteLine($"({str})");
    }

    public void ShowWithAster()
    {
        Console.WriteLine($"*{str}*");
    }
}

public interface IPrint
{
    void PrintWeak();
    void PrintString();
}

public class PrintBanner : Banner, IPrint
{
    public PrintBanner(string str) : base(str)
    {
    }

    public void PrintString()
    {
        ShowWithAster();
    }

    public void PrintWeak()
    {
        ShowWithParen();
    }
}

class Program
{
    static void Main(string[] args)
    {
        var p = new PrintBanner("Hello");
        p.PrintWeak();
        p.PrintString();
    }
}

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

(Hello)
*Hello*

コード(移譲を使った場合)

移譲とは他のクラスに処理を任せることです。
Printクラスという抽象クラスを用意して、PrintBannerクラスはPrintクラスを継承しています。
実際の文字出力の処理はBannerクラスが行っています。(Bannerクラスに処理を移譲している)


public abstract class Print
{
    public abstract void PrintWeak();
    public abstract void PrintString();
}

public class PrintBanner : Print
{
    private readonly Banner banner;
    public PrintBanner(string str)
    {
        this.banner = new Banner(str);
    }

    public override void PrintString()
    {
        banner.ShowWithAster();
    }

    public override void PrintWeak()
    {
        banner.ShowWithParen();
    }
}

処理結果は同じものが出力されます。

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

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

コメントを残す

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

CAPTCHA