JW.*_*JW. 8 oop factory subclass
比方说,我有一个抽象类饮料,以及选择的饮料(葡萄酒,啤酒等)的类型在运行时创建的工厂方法.
每个饮料都需要一些参数来正确初始化自己.其中一些是所有饮料的共同点; 例如,他们可能都需要DrinkConfig参数.
但每种饮料也可能有其独特的要求.也许Wine需要一个Sommelier辅助对象来初始化自己.啤酒不需要它,但它可能需要它自己的辅助对象.
那么我应该将什么传递给工厂方法呢?当我调用它时,我有所有可用的辅助对象,所以我可以将它们全部传递给工厂.但这最终可能会引发很多争论.有没有更好的方法来设计它?
编辑:我们假设我不能在工厂中创建辅助对象; 他们只能从来电者处获得.
我会在你的工厂类中创建不同的重载方法。
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);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
如果希望 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.");
}
}
}
Run Code Online (Sandbox Code Playgroud)