在我的一个项目中,我必须实施Factory设计模式来解决特定问题。
我有一个父接口和两个子接口。在下一步中,我必须创建一个工厂,该工厂将根据给定的输入返回特定类的实例。
请查看下面的示例代码,该代码解释了我的问题以及示例图。
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
调用狗的方法。
您可以通过多种选择来解决此问题。这里有一些选择。
有用于创建的不同扩展名的单独方法Animal
。因此,代替Animal getInstance(AnimalType type)
您的是工厂中的Dog getDog()
和Cat getCat()
方法。鉴于工厂无论如何都需要了解所有这些类别,这对我来说似乎是最佳选择。
继续Animal
从您的工厂退回实例,然后使用“访客”模式来区别对待猫狗。
使用instanceof
和施放将动物当作狗或猫。在大多数情况下不建议这样做,但在某些情况下适用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句