本实例是Head First的第一个鸭子实例
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 swim() {
System.out.println("all ducks float ,even decoys");
}
}
public interface FlyBehavior {
void fly() ;
}
public class FlyNoWay implements FlyBehavior {
@Override
public void fly() {
System.out.println("鸭子不会飞");
}
}
public class FlyWithWings implements FlyBehavior {
@Override
public void fly() {
System.out.println("实现鸭子飞行");
}
}
public interface QuackBehavior {
void quack();
}
public class Quack implements QuackBehavior {
@Override
public void quack() {
System.out.println("鸭子呱呱叫");
}
}
public class MuteQuack implements QuackBehavior {
@Override
public void quack() {
System.out.println("不会叫");
}
}
public class Squeak implements QuackBehavior {
@Override
public void quack() {
System.out.println("鸭子吱吱叫");
}
}
public class MallardDuck extends Duck {
public MallardDuck() {
quackBehavior=new Quack();
flyBehavior=new FlyWithWings();
}
@Override
public void display() {
System.out.println("Im a real Mallard duck");
}
}
public class MiniDuckSimulator {
public static void main(String[] args) {
Duck duck=new MallardDuck();
duck.performFly();
duck.performQuack();
}
}