在我的一个项目中,我必须实现工厂设计模式来解决特定问题。
我有一个父接口(interface)和两个子接口(interface)。在下一阶段,我必须创建一个工厂,它将根据给定的输入返回特定类的实例。
请参阅下面的示例代码,它解释了我的问题以及示例图。
示例图
示例代码
enum AnimalType{ DOG, CAT }
Class Factory{
public Animal getInstance(AnimalType animalType){
Animal animal = null;
switch(animalType){
case DOG: animal = new Dog();
break;
case CAT: animal = new Cat();
break;
default:
break;
}
return animal;
}
}
/*Actual Problem */
Animal animal = Factory.getInstance(AnimalType.DOG);
/* When I use any IDE like IntellijIdea or Eclipse it only provides eat() method after animal and dot (ie. animal. ) */
animal.<SHOULD PROVIDE eat() and woof() from Dog> but it is only providing eat()
有什么建议可以解决这个问题吗?或者,我应该考虑解决这个问题的任何其他设计模式吗?
最佳答案
您的问题与工厂模式没有直接关系。您正在声明一个 Animal
,然后想将其视为 Dog
。无论您如何创建它,您都需要将其设为Dog
来调用doggy方法。
您有多种选择来解决此问题。这里有一些替代方案。
有单独的方法来创建
Animal
的不同扩展。因此,工厂中将使用Dog getDog()
和Cat getCat()
方法,而不是Animal getInstance(AnimalType type)
。鉴于工厂无论如何都需要了解所有这些类,这对我来说似乎是最好的选择。继续从工厂返回
Animal
实例,但随后使用“访客”模式以不同方式对待狗和猫。使用
instanceof
和转换将动物视为狗或猫。在大多数情况下不建议这样做,但在某些情况下是合适的。
关于java - 工厂设计模式和Diamond OOP问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38602865/