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

「増補改訂版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)

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

コメントを残す

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

CAPTCHA