鸭子的行为:
public interface FlyBehavior
{
public void fly();
}
public class FlyWithWings implements FlyBehavior
{
public void fly()
{
System.out.println("I'm flying!!");
}
}
public class FlyNoWay implements FlyBehavior
{
public void fly()
{
System.out.println("I can't fly");
}
}
public class FlyRocketPowered implements FlyBehavior
{
public void fly()
{
System.out.println("I'm flying with a rocket!");
}
}
public interface QuackBehavior
{
public void quick();
}
public class Quack implements QuackBehavior
{
public void quack()
{
System.out.println("Quack");
}
}
public class MuteQuack implements QuackBehavior
{
public void quack()
{
System.out.println("<<Slience>>");
}
}
public class Squack implements QuackBehavior
{
public void quack()
{
System.out.println("Squack ");
}
}
public abstract class Duck
{
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public Duck()
{
}
public abstract void display();
public void performFly()
{
flyBehavior.fly();
}
public void performQuack()
{
quackBehavior.quack();
}
public void setFlyBehavior(FlyBehavior fb)
{
flyBehavior = fb;
}
public void setQuackBehavior(QuackBehavior qb)
{
quackBehavior = qb;
}
public void swim()
{
System.out.println("All ducks float,even decoys!")
}
}
public class MallardDuck extends Duck
{
public MallardDuck ()
{
quackBehavior = new Quack();
flyBehavior = new FlyWithWings();
}
public void display()
{
System.out.println("I'm a real Mallard duck");
}
}
public class ModelDuck extends Duck
{
public ModelDuck ()
{
flyBehavior = new FlyNoWay();
quackBehavior = new Quack();
}
public void display()
{
System.out.println("I'm a model duck");
}
}
测试鸭子:
public class MiniDuckSimulator
{
public static void main(String[] args)
{
Duck mallard = new MallardDuck();
mallard.performQuack();
mallard.performFly();
Duck model = new ModelDuck();
model.performFly();
model.setFlyBehavior(new FlyRocketPowered());
model.performFly();
}
}