2 回答
TA贡献1883条经验 获得超3个赞
你NYPizzaStore
将不得不使用的ChicagoPizzaIngredientFactory
,如果你希望它能够使用ThickCrustDough
。
但是,如果您考虑这种做法的实用性,让他们向您运送芝加哥的食材可能就没有意义了。
在我看来,您有两种选择:
在纽约设有另一家可以生产浓面团的工厂(例如
NYThickPizzaIngredientFactory
)。这是因为您的界面只有一个createDough
不带参数的方法,因此您无法告诉它要制作哪种面团。它只能使一个。更改您的界面,使该
createDough
方法接受可以告诉工厂要制造哪种面团的参数。这是我推荐的。
参数的类型也可以基于特定的工厂。例如:
//TDoughArts tells you what type of arguments the factory needs in order to make dough.
public interface IPizzaIngredientFactory<TDoughArgs> where TDoughArgs : IDoughArgs
{
//....
IDough CreateDough(TDoughArgs doughArgs);
//....
}
public interface IDoughArgs
{
}
public class NYPizzaDoughArgs : IDoughArgs
{
public enum DoughTypes
{
Thin = 0,
Thick = 1
}
public DoughTypes DoughType { get; set; }
}
public class NYPizzaIngredientFactory : IPizzaIngredientFactory<NYPizzaDoughArgs>
{
//....
public IDough CreateDough(NYPizzaDoughArgs doughArgs)
{
//Make the right dough based on args here
if(doughArgs.DoughType == DoughTypes.Thin)
//...
}
//....
}
我在几分钟内就提出来了,因此请检查一致性,但是我想您会明白的。
您不必使用泛型。IDoughArgs如果您不想获得更多的特异性,则可以坚持使用该界面。
用法:
var factory = new NYPizzaIngredientFactory();
var args = new NYPizzaDoughArgs();
args.DoughType = NYPizzaDoughArgs.DoughTypes.Thick;
var dough = factory.createDough(args);
- 2 回答
- 0 关注
- 161 浏览
添加回答
举报