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

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

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


参考
DesignPattern【FactoryMethod】GitHub

コード


public abstract class Product
{
    public abstract void Use();
}

public abstract class Factory
{
    public Product Create(string owner)
    {
        var p = CreateProduct(owner);
        RegisterProduct(p);
        return p;
    }

    public abstract Product CreateProduct(string owner);
    public abstract void RegisterProduct(Product product);
}

public class IDCard : Product
{
    public string Owner { get; private set; }
    public IDCard(string owner)
    {
        Console.WriteLine($"{owner}のカードを作ります。");
        this.Owner = owner;
    }

    public override void Use()
    {
        Console.WriteLine($"{Owner}のカードを使います。");
    }
}

public class IDCardFactory : Factory
{
    public IList Owners { get; private set; } = new List();
    public override Product CreateProduct(string owner)
    {
        return new IDCard(owner);
    }

    public override void RegisterProduct(Product product)
    {
        Owners.Add(((IDCard)product).Owner);
    }
}

class Program
{
    static void Main(string[] args)
    {
        Factory factory = new IDCardFactory();
        Product card1 = factory.Create("結城浩");
        Product card2 = factory.Create("とむら");
        Product card3 = factory.Create("佐藤花子");
        card1.Use();
        card2.Use();
        card3.Use();
    }
}

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

結城浩のカードを作ります。
とむらのカードを作ります。
佐藤花子のカードを作ります。
結城浩のカードを使います。
とむらのカードを使います。
佐藤花子のカードを使います。

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

コメントを残す

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

CAPTCHA