Joe and Duck-------The Strategy Pattern
![]() |
Joe works for a company that makes a highly successful duck pond simulation game.The game can show a large varicty of duck species swimming and making quacking sounds.The initial designers of the systme used standard OO techniques and created one Duck superclass from which all others duck types inherit. |


Duck.class
public abstract class Duck{
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public Duck(){
}
public abstract void display();
public void performFly(){
flyBehavior.fly();
}
pulbic void performQuack(){
quackBehavior.quack();
}
pulbic void swim(){
System.out.println("All ducks flow,even decoys!")
}
} MallardDuck.class
public class MallardDuck extends Duck{
public MallardDuck(){
quackBehavior=new Quack();
flyBehavior=new FlyWithWings();
}
//remember MallardDuck inherits the
//quack behavior and fly behavior
//instance variables from the base class
public void display(){
System.out.println("I am a real mallard duck ");
}
}
public interface QuackBehavior{
public void quack();
}
public class Quack implements QuackBehavior{
public void quack() {
System.out.println("Quack:);
}
}
public class MuteQuack implements QuackBehavior{
public void quack (){
System.out.println("<Silence>");
}
}
public class Squeak implements QuackBehavior{
public void quack() {
System.out.println("Squeak");
}
}

//test
public class MiniDuckSimulator {
public static void main(string[] args){
Duck mallard=new MallardDuck();
mallard.performQuack();
mallard.performFly();
}
}



浙公网安备 33010602011771号