爪哇

用于理解的简单示例:
两个抽象类,动物和产品。

动物使用方法生产来创建新对象,例如牛奶和鸡蛋。

扩展了动物抽象类的两个类(鸡和牛)。

两个类(鸡蛋和牛奶)扩展了抽象类产品。

将有多个实例的鸡牛鸡蛋和牛奶。

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

我试过的
我试图在我的Chicken类中有一个静态的egg实例,然后将其作为参数传递给动物构造函数,但这是一个问题,因为我不想在制作Chicken实例时创建egg实例。
我想让动物抽象类知道它是否将制作鸡蛋实例,具体取决于它是被鸡还是牛所扩展的。

最佳答案

一种方法是使produce()方法也变得抽象,因此ChickenCow类必须实现它们。

另一个可能更糟糕的设计是传入ProductFactory对象,该对象可以是可以分别制作鸡蛋或牛奶的EggFactory或MilkFactory。

但是我会采用抽象的produce()技术。

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

class Chicken extends Animal{

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

09-26 02:55