
振る舞いを動的に設定する
動的な能力をカモに組み込んでおいて、それを使用しないのはもったいないことで
す。カモの振る舞いの型をカモのコンストラクタでインスタンス化するのではなく、
Duck
クラスのセッターメソッドを使用して設定したい場合を考えてみましょう。
1
Duck
クラスに
2
つの新しいメソッドを追加する
カモの振る舞いを変更したいときにはいつでも、実行時に上記
のメソッドを呼び出すことができます。
public void setFlyBehavior(FlyBehavior fb) {
flyBehavior = fb;
}
public void setQuackBehavior(QuackBehavior qb) {
quackBehavior = qb;
}
public class ModelDuck extends Duck {
public ModelDuck() {
flyBehavior = new FlyNoWay();
quackBehavior = new Quack();
}
public void display() {
System.out.println("
模型のカモです
");
}
}
public class FlyRocketPowered implements FlyBehavior {
public void fly() {
System.out.println("
ロケットで飛んでいます!
");
}
}
2
この模型のカモは飛ぶ手段を持ちません。
地上で生活を始めます。 ...