このチュートリアルを使用して、戦略パターンを調べてきました。彼が話している出力を受け取りましたが、digHole() メソッドを使用するオプションがないようです。Dog() コンストラクターでメソッドを呼び出すと、機能します。
これは、アニマル クラスで掘る能力 (飛行能力など) を保存する方法を実装する必要があるためだと思いますが、これで正しいでしょうか? これはまた、動物に実行させたいすべてのアクションについて、Animal クラスで構成し、能力を備えたインターフェイスを作成してから、その能力を実装する 2 つのクラスを作成する必要があるということですか。つまり、能力が実装されているか実装されていないかのどちらかです?
また、ストラテジー パターンの背後にある主な考え方を定式化する際にも、いくつかの問題があります。現在、私はそれを「すべてのアクションをカプセル化し、それらを 1 つのメイン クラスにまとめる」と考えています。これはどの程度正確/適切ですか?
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";
}
}