「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)

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

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

コメントを残す

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

CAPTCHA