Java 摘要 class 用于安装其他 class

Java Abstract class to instationize other class

Java

用于理解的简单示例: 两个摘要 classes,Animal 和 Product。

Animal 有方法 Produce,用于创建新对象,例如牛奶和鸡蛋。

两个 classes(Chicken and Cow) 扩展摘要 class Animal.

两个 classes(鸡蛋和牛奶)扩展摘要 class 产品。

会有多个鸡牛蛋牛奶实例。

我的问题: 根据动物(鸡或牛),我的动物抽象 class 的方法(Produce)如何知道要实例化哪个产品(鸡蛋或牛奶)。

我尝试了什么: 我尝试在我的鸡 class 中有一个 egg 的静态实例,然后将它作为参数传递给动物构造函数,但这是一个问题,因为我不想在 chicken 的实例时创建 egg 的实例制成。 我想让动物摘要 class 知道它是否会生成鸡蛋的实例,这取决于它是由鸡还是牛扩展的。

好吧,一种方法是将 produce() 方法也抽象化,以便 ChickenCow 类 必须实现它们。

另一个可能更糟糕的设计是传入一个 ProductFactory 对象,它可以是 EggFactory 或 MilkFactory,可以分别制作 Eggs 或 Milk。

但我会选择抽象的 produce() 技术。

abstract class Animal{
    public abstract Product produce();
}

class Chicken extends Animal{

    public Product produce(){
         return new Egg();
    }
}