爪哇
用于理解的简单示例:
两个抽象类,动物和产品。
动物使用方法生产来创建新对象,例如牛奶和鸡蛋。
扩展了动物抽象类的两个类(鸡和牛)。
两个类(鸡蛋和牛奶)扩展了抽象类产品。
将有多个实例的鸡牛鸡蛋和牛奶。
我的问题:
取决于动物(鸡或牛),我的Animal抽象类的方法(Produce)如何知道要实例化哪个产品(鸡蛋或牛奶)。
我试过的
我试图在我的Chicken类中有一个静态的egg实例,然后将其作为参数传递给动物构造函数,但这是一个问题,因为我不想在制作Chicken实例时创建egg实例。
我想让动物抽象类知道它是否将制作鸡蛋实例,具体取决于它是被鸡还是牛所扩展的。
最佳答案
一种方法是使produce()
方法也变得抽象,因此Chicken
和Cow
类必须实现它们。
另一个可能更糟糕的设计是传入ProductFactory
对象,该对象可以是可以分别制作鸡蛋或牛奶的EggFactory或MilkFactory。
但是我会采用抽象的produce()
技术。
abstract class Animal{
public abstract Product produce();
}
class Chicken extends Animal{
public Product produce(){
return new Egg();
}
}