策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
策略对象需要实现相同的接口。
/**
* 鸭子类(客户端)
* @author huangy on 2019-05-18
*/
public class Durk {
protected FlyBehavior flyBehavior;
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
public void performFly() {
flyBehavior.fly();
}
}
/**
* 绿头鸭
* @author huangy on 2019-05-18
*/
public class GreenDurk extends Durk {
}
/**
* 飞行行为
* @author huangy on 2019-05-18
*/
public interface FlyBehavior {
void fly();
}
/**
* 飞行行为具体实现类
* (算法族的其中一个算法)
* @author huangy on 2019-05-18
*/
public class FlyBehaviorWithRockt implements FlyBehavior {
@Override
public void fly() {
System.out.println("i can fly with rocky");
}
}
/**
* 飞行行为具体实现类
* (算法族的其中一个算法)
* @author huangy on 2019-05-18
*/
public class FlyBehaviorToSky implements FlyBehavior {
@Override
public void fly() {
System.out.println("i can fly to sky");
}
}
public class Demo {
public static void main(String[] args) {
// 鸭子(客户端)
Durk durk = new GreenDurk();
// 鸭子把具体飞行的行为,委托给FlyBehavior具体对象实现(客户端使用 "火箭器 飞行的算法")
FlyBehavior flyBehaviorWithRocket = new FlyBehaviorWithRockt();
durk.setFlyBehavior(flyBehaviorWithRocket);
// 鸭子执行具体行为
durk.performFly();
}
}