工厂设计模式和钻石OOP问题

奇拉格·维萨瓦迪亚(Chirag Visavadiya)

在我的一个项目中,我必须实施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调用狗的方法。

您可以通过多种选择来解决此问题。这里有一些选择。

  1. 有用于创建的不同扩展名的单独方法Animal因此,代替Animal getInstance(AnimalType type)您的是工厂中的Dog getDog()Cat getCat()方法。鉴于工厂无论如何都需要了解所有这些类别,这对我来说似乎是最佳选择。

  2. 继续Animal从您的工厂退回实例,然后使用“访客”模式来区别对待猫狗。

  3. 使用instanceof和施放将动物当作狗或猫。在大多数情况下不建议这样做,但在某些情况下适用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章