分别有一个飞行和叫的行为接口
public interface FlyBehavior {
void fly();
}
public interface QuackBehavior {
void quack();
}
让不同的行为实现这些接口
public class FlyWithWings implements FlyBehavior {
@Override
public void fly() {
System.out.println("I'm flying!");
}
}
//以及FlyNoWay、FlyRocketPowered等行为,随意添加
public class Quack implements QuackBehavior {
@Override
public void quack() {
System.out.println("Quack");
}
}
以及MuteQuack、Squeak等行为,随意添加,此处略
创建所需要的鸭子对象继承鸭子类,但需要改变的行为只是继承了接口引用。
public class MallardDuck extends Duck {
//通过构造可以赋予指定行为
MallardDuck() {
flyBehavior = new FlyWithWings();
quackBehavior = new Quack();
}
@Override
public void display() {
System.out.println("I’m a real Mallard duck!");
}
}
但在运行时也可以改变行为,测试类
public class MiniDuckSimulator{
public static void main(String[] args) {
Duck mallard = new MallardDuck();
mallard.performFly();
mallard.performQuack();