我是设计模式的新手,现在我正在学习工厂方法模式。我尝试用动物做一个例子。
我有一个动物界面,有两种方法:呼吸和行走。实现这个接口(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/