定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
模拟鸭子应用,不同鸭子有不同的行为
public interface FlyBehavior {
void fly();
}
public class FlyWithWings implements FlyBehavior {
@Override
public void fly() {
System.out.println("I'm flying");
}
}
public class FlyNoWay implements FlyBehavior {
@Override
public void fly() {
System.out.println("I can't fly");
}
}
public class FlyRocketPowered implements FlyBehavior {
@Override
public void fly() {
System.out.println("I'm flying with a rocket!");
}
}
@Setter
public abstract class Duck {
private FlyBehavior flyBehavior;
public Duck() {
}
public abstract void display();
public void performFly() {
flyBehavior.fly();
}
public void swim() {
System.out.println("All ducks float, even decoys!");
}
}
public class ModelDuck extends Duck {
public ModelDuck() {
setFlyBehavior(new FlyNoWay());
}
@Override
public void display() {
System.out.println("I'm a model duck");
}
}
public class TestModelDuck {
@Test
public void test() {
Duck model = new ModelDuck();
model.performFly();
model.setFlyBehavior(new FlyRocketPowered());
model.performFly();
}
}
I can't fly
I'm flying with a rocket!