当一个基类会派生出不同的子类,而这些子类拥有自己特有的行为时,我们可以考虑使用策略模式。
public interface FlyBehavior {
void fly();
}
public class FlyWithSwings implements FlyBehavior{
@Override
public void fly() {
System.out.println("Now I fly with swings!");
}
}
public class FlyNoWay implements FlyBehavior{
@Override
public void fly() {
System.out.println("I can't fly!");
}
}
abstract class Duck{
private FlyBehavior flyBehavior;
public abstract void getName();
Duck(){
flyBehavior = new FlyNoWay();
}
public void setFlyBehavior(FlyBehavior flyable){
flyBehavior = flyable;
}
public void performFly(){
flyBehavior.fly();
}
}
class RedDuck extends Duck{
void getName(){
System.out.println("I'm a red duck!");
}
}
class YellowDuck extends Duck{
void getName(){
System.out.println("I'm a yellow duck!");
}
}
class Main{
public static void main(String[] args){
Duck duck = new RedDuck();
duck.performFly();
duck = new RedDuck();
duck.setFlyBehavior(new FlyWithSwings());
duck.getName();
duck.performFly();
duck = new YellowDuck();
duck.getName();
duck.performFly();
}
}