「増補改訂版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();
}
}
実行結果は以下のようになります。
結城浩のカードを作ります。
とむらのカードを作ります。
佐藤花子のカードを作ります。
結城浩のカードを使います。
とむらのカードを使います。
佐藤花子のカードを使います。
その他のデザインパターンは以下の記事から確認してください。