我一直在使用本教程来研究策略模式。我收到了他谈到的输出,但似乎没有使用 digHole() 方法的选项。当我在 Dog() 构造函数中调用该方法时,它可以工作。
我的猜测是发生这种情况是因为我需要实现一种方法来保存在 Animal 类中挖掘的能力(如飞行能力),我在这方面是否正确?这是否也意味着对于我想让动物采取的每一个动作,我都应该在 Animal 类中编写它,创建一个具有该能力的接口,然后创建两个实现该能力的类,这意味着该能力要么已实现,要么没有吨?
在制定策略模式背后的主要思想时,我也遇到了一些麻烦。目前,我将其视为“封装所有动作并将它们组合在一个主类中”。这有多准确/拟合?
public class Animal {
public Flies flyingType;
public String tryToFly() {
return flyingType.fly();
}
public void setFlyingAbility(Flies newFlyType) {
flyingType = newFlyType;
}
}
public class Dog extends Animal {
public Dog() {
super();
setSound("Bark");
flyingType = new CantFly();
}
public void digHole() {
System.out.println("Dug a hole");
}
}
public interface Flies {
String fly();
}
class ItFlies implements Flies {
public String fly() {
return "Flying high";
}
}
class CantFly implements Flies {
public String fly() {
return "I can't fly";
}
}