2 回答

TA貢獻(xiàn)1883條經(jīng)驗 獲得超3個贊
你NYPizzaStore
將不得不使用的ChicagoPizzaIngredientFactory
,如果你希望它能夠使用ThickCrustDough
。
但是,如果您考慮這種做法的實(shí)用性,讓他們向您運(yùn)送芝加哥的食材可能就沒有意義了。
在我看來,您有兩種選擇:
在紐約設(shè)有另一家可以生產(chǎn)濃面團(tuán)的工廠(例如
NYThickPizzaIngredientFactory
)。這是因為您的界面只有一個createDough
不帶參數(shù)的方法,因此您無法告訴它要制作哪種面團(tuán)。它只能使一個。更改您的界面,使該
createDough
方法接受可以告訴工廠要制造哪種面團(tuán)的參數(shù)。這是我推薦的。
參數(shù)的類型也可以基于特定的工廠。例如:
//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)
//...
}
//....
}
我在幾分鐘內(nèi)就提出來了,因此請檢查一致性,但是我想您會明白的。
您不必使用泛型。IDoughArgs如果您不想獲得更多的特異性,則可以堅持使用該界面。
用法:
var factory = new NYPizzaIngredientFactory();
var args = new NYPizzaDoughArgs();
args.DoughType = NYPizzaDoughArgs.DoughTypes.Thick;
var dough = factory.createDough(args);
- 2 回答
- 0 關(guān)注
- 194 瀏覽
添加回答
舉報