假设我有一个抽象类 Drink 和一个工厂方法,它选择在运行时创建的 Drink 类型(Wine、Beer 等)。
每个 Drink 都需要一些参数来正确初始化自己。其中一些是所有饮料共有的;例如,它们可能都需要一个 DrinkConfig 参数。
但每种饮品也可能有其独特的要求。也许 Wine 需要一个侍酒师助手对象来初始化自己。 Beer 不需要那个,但它可能需要它自己的辅助对象。
那么我应该向工厂方法传递什么?当我调用它时,我拥有所有可用的辅助对象,因此我可以将它们全部传递给工厂。但这最终可能会成为很多争论。有没有更好的方法来设计这个?
编辑:假设我不能只在工厂中创建辅助对象;它们只能从调用者那里获得。
最佳答案
我会在你的工厂类中创建不同的重载方法。
public class DrinkFactory {
public static Drink CreateBeer(DrinkConfig config, string hops) {
return new Beer(config, hops);
}
public static Drink CreateWine(DrinkConfig config, string grapes, int temperature) {
return new Wine(config, grapes, temperature);
}
}
编辑:
如果希望在 Factory 类中只有一个方法,另一种实现是:
public enum DrinksEnum {
Beer,
Wine
}
public class DrinkFactory {
public static Drink CreateDrink(DrinksEnum drinkType, DrinkConfig config) {
switch(drinkType) {
case DrinksEnum.Beer:
return new Beer(config);
case DrinksEnum.Wine:
return new Wine(config);
default:
throw new ApplicationException("Drink type not recognised.");
}
}
}
关于oop - 通过工厂方法将参数传递给特定的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/855569/