通过工厂方法将参数传递给特定的子类

JW.*_*JW. 8 oop factory subclass

比方说,我有一个抽象类饮料,以及选择的饮料(葡萄酒,啤酒等)的类型在运行时创建的工厂方法.

每个饮料都需要一些参数来正确初始化自己.其中一些是所有饮料的共同点; 例如,他们可能都需要DrinkConfig参数.

但每种饮料也可能有其独特的要求.也许Wine需要一个Sommelier辅助对象来初始化自己.啤酒不需要它,但它可能需要它自己的辅助对象.

那么我应该将什么传递给工厂方法呢?当我调用它时,我有所有可用的辅助对象,所以我可以将它们全部传递给工厂.但这最终可能会引发很多争论.有没有更好的方法来设计它?

编辑:我们假设我不能在工厂中创建辅助对象; 他们只能从来电者处获得.

sip*_*wiz 4

我会在你的工厂类中创建不同的重载方法。

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)