「増補改訂版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();
}
}
処理結果は同じものが出力されます。
その他のデザインパターンは以下の記事から確認してください。