java - 如何在 Java 中扩展工厂方法模式中的类

标签 java design-patterns factory-method

我是设计模式的新手,现在我正在学习工厂方法模式。我尝试用动物做一个例子。

我有一个动物界面,有两种方法:呼吸和行走。实现这个接口(interface)我有两个类,Giraffe 和 Flamingo。

按照这个模式,我有两个工厂,一个用于长颈鹿,一个用于火烈鸟,还有一个像这样的主类:

if (color.equals("yellow")) {
  factory = new GiraffeFactory();
} else {
  factory = new FlamingoFactory();
}

Animal animal = factory.createAnimal();
animal.breathe();
animal.walk();

这很完美,但现在我意识到火烈鸟可以飞。我不想在动物接口(interface)中包含此方法,因为长颈鹿不能。

如何才能仅在 Flamingo Animal 实例中调用这个新方法?强制转换是唯一的解决方案吗?或者这种模式仅适用于接口(interface)中具有相同方法的对象?

((Flamingo) animal).fly();

非常感谢。

最佳答案

嗯,这种模式的使用没有多大意义,重点是你不知道你会得到什么 Animal 的实现(责任分离),所以使用知识。你可以创建一个新的接口(interface) Winged 之类的,然后让 Flamingo 实现它。然后你就可以随时检查。请记住, bat 在想到名字时也会飞;)

if (animal instanceof Winged) {
    Winged winged = (Winged) animal;
    winged.fly();
}

关于java - 如何在 Java 中扩展工厂方法模式中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50447383/

相关文章:

c++ - 通用工厂设计模式的实现

java - 在 App Engine 上定期运行一些 java?

java - 只接受一个字母输入

ios - Objective-C:在子类中使用继承和调用方法

java - 这个命令模式是线程安全的吗?

asp.net - 面向方面的开发/编程资源

c#-4.0 - StructureMap 实例工厂方法

java - 分块读取大文本文件处理

java - 删除body box2d

android - 在android示例中,为什么ScreenSlidePageFragment类使用工厂方法来创建对象