【发布时间】:2021-01-13 14:07:13
【问题描述】:
我是设计模式的新手,现在我正在学习工厂方法模式。我尝试用动物做一个例子。
我有一个 Animal 接口,它有两种方法,呼吸和行走。实现这个接口我有两个类,Giraffe 和 Flamingo。
按照这种模式,我有两个工厂,一个用于长颈鹿,一个用于火烈鸟,还有一个像这样的主类:
if (color.equals("yellow")) {
factory = new GiraffeFactory();
} else {
factory = new FlamingoFactory();
}
Animal animal = factory.createAnimal();
animal.breathe();
animal.walk();
这很好用,但现在我意识到火烈鸟会飞。我不想在 Animal 接口中包含这个方法,因为 Giraffes 不能。
我怎样才能只在 Flamingo Animal 实例中调用这个新方法?铸造是唯一的解决方案吗?还是这种模式仅适用于在其接口中具有相同方法的对象?
((Flamingo) animal).fly();
非常感谢。
【问题讨论】:
-
您可以创建一个扩展
Animal的FlyingAnimal接口。重点是您在每种情况下都需要的:如果您需要一个接收Animal的方法让他飞起来(调用.fly()),那么您实际上期待的是FlyingAnimal,而不仅仅是Animal,所以您必须更改方法签名才能接收FlyingAnimal
标签: java design-patterns factory-method