【发布时间】:2011-03-22 04:46:31
【问题描述】:
采用以下经典工厂模式:
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 需要一个特定于构造时具体实现的参数怎么办。例如,假设 HamAndMushroom 工厂需要一个名为 MushroomType 的参数,并且需要此参数来实例化对象?
【问题讨论】:
-
嗯...也许您解决问题的方法是错误的。由于所有 Pizza 类型仅在 WRT 一个数据字段中有所不同,因此单个 Pizza 类型就可以了,数据在 DB 中。
标签: c# design-patterns factory-pattern