「増補改訂版Java言語で学ぶデザインパターン入門」の「Facadeパターン」をC#で書いてみました。
GitHubにもコードを置いています。
参考
DesignPattern【Facade】GitHub
コード
参考記事に以下のような説明があります。
NuGet パッケージ「Authlete.Authlete」に含まれる PropertiesLoader クラスは Properties ファイルの仕様を解釈することができる。
これにより、キーバリュー形式のテキストファイルを読み込むことができます。
using Authlete.Util;
public class Database
{
private Database()
{
}
// 参考記事
// https://qiita.com/TakahikoKawasaki/items/3120e539c87802b23c03
public static IDictionary string, string> GetProperties(string dbname)
{
string filename = $"{dbname}.txt";
IDictionary string, string> prop;
using (var reader = new StreamReader(filename))
{
prop = PropertiesLoader.Load(reader);
}
return prop;
}
}
public class HtmlWriter
{
private StreamWriter writer;
public HtmlWriter(StreamWriter writer)
{
this.writer = writer;
}
public void Title(string title)
{
writer.Write(" html>");
writer.Write(" head>");
writer.Write($" title>{title} /title>");
writer.Write(" /head>");
writer.Write(" body>\n");
writer.Write($" h1>{title} /h1>");
}
public void Paragraph(string msg)
{
writer.Write($" p>{msg} /p>\n");
}
public void Link(string href, string caption)
{
Paragraph($" a href=\"{href}\">{caption} /a>");
}
public void MailTo(string mailaddr, string username)
{
Link($"mailto:{mailaddr}", username);
}
public void Close()
{
writer.Write(" /body>");
writer.Write(" /html>\n");
writer.Close();
}
}
public class PageMaker
{
private PageMaker()
{
}
public static void MakeWelcomePage(string mailaddr, string filename)
{
try
{
IDictionary string, string> mailprop = Database.GetProperties("maildata");
string username = mailprop[mailaddr];
using (var sw = new StreamWriter(filename))
{
HtmlWriter writer = new HtmlWriter(sw);
writer.Title($"Welcome to {username}'s page!");
writer.Paragraph($"{username}のページへようこそ");
writer.Paragraph("メール待ってますね");
writer.MailTo(mailaddr, username);
writer.Close();
Console.WriteLine($"{filename} is created for {mailaddr} ({username})");
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
class Program
{
static void Main(string[] args)
{
PageMaker.MakeWelcomePage("hyuki@hyuki.com", "welcom.html");
}
}
実行結果は以下のようになります。
welcom.html is created for hyuki@hyuki.com (Hiroshi Yuki)
その他のデザインパターンは以下の記事から確認してください。