Я использовал это руководство, чтобы изучить стратегию шаблон. Я получаю вывод, о котором он говорит, но похоже, что нет возможности использовать метод digHole(). Однако, когда я вызываю метод в конструкторе Dog(), он работает.
Я предполагаю, что это происходит потому, что мне нужно реализовать способ сохранить способность копать в классе животных (например, способность летать), я прав? Означает ли это также, что для каждого действия, которое я хочу, чтобы животное совершило, я должен скомпоновать его в классе 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";
}
}