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

标签 oop subclass factory

假设我有一个抽象类 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/

相关文章:

python - 将函数应用于 faker

ios - 子类化或不子类化 : that is the . ..?

oop - 将多个类使用的方法放在哪里?

javascript - 如何在 JetBrains Webstorm/PHPStorm 中编写 oop javascript(带有继承)以获得自动完成/智能感知

c++ - extern 声明变量和全局变量的区别

Java类的用途非常有限,但不限于一个类。外在还是内在?

java - 使用子类对象修改其父类(super class)对象中的 protected 属性

javascript - 简单对象 vs. 工厂 vs. 构造函数——实例

AngularJS : Why is my factory always undefined in my controller?

c++ - 使用模板化函数减少代码