次の古典的なファクトリ パターンを使用します。
public interface IPizza
{
decimal Price { get; }
}
public class HamAndMushroomPizza : IPizza
{
decimal IPizza.Price
{
get
{
return 8.5m;
}
}
}
public abstract class PizzaFactory
{
public abstract IPizza CreatePizza(ItalianPizzaFactory.PizzaType pizzaType);
}
public class ItalianPizzaFactory : PizzaFactory
{
public enum PizzaType
{
HamMushroom,
Deluxe,
Hawaiian
}
public override IPizza CreatePizza(PizzaType pizzaType)
{
switch (pizzaType)
{
case PizzaType.HamMushroom:
return new HamAndMushroomPizza();
case PizzaType.Hawaiian:
return new HawaiianPizza();
default:
throw new ArgumentException("The pizza type " + pizzaType + " is not recognized.");
}
}
}
Concrete Pizzas の 1 つ (または多数) が、構築時に具体的な実装に固有のパラメーターを必要とする場合はどうなるでしょうか。たとえば、HamAndMushroom ファクトリが MushroomType というパラメーターを必要とし、このパラメーターがオブジェクトのインスタンス化に必要であるとしましょう。