把可能会变化的部分封装起来。
package Strategy_pattern;
interface FlyBehavior {
public void fly();
}
interface QuackBehavior {
public void quack();
}
// 鸭子抽象类
abstract class Duck {
protected FlyBehavior flyBehavior; // 每个鸭子都有的飞行为和叫行为
protected QuackBehavior quackBehavior;
public Duck() {
}
public abstract void display();
public void performFly() {
flyBehavior.fly();
}
public void performQuack() {
quackBehavior.quack();
}
public void swim() {
System.out.println("I like swimming!");
}
}
class FlyNoWay implements FlyBehavior {
@Override
public void fly() {
System.out.println("I can't fly");
}
}
class QuackNoWay implements QuackBehavior {
@Override
public void quack() {
System.out.println("I can't quack");
}
}
class ModelDuck extends Duck {
public ModelDuck() {
flyBehavior = new FlyNoWay();
quackBehavior = new QuackNoWay();
}
@Override
public void display() {
System.out.println("I am ModelDuck");
}
}
// 测试
public class Main {
public static void main(String args[]) {
Duck duck = new ModelDuck();
duck.display();
duck.performFly();
duck.performQuack();
duck.swim();
}
}