策略模式:定义了算法族,分别封装起来,让它们之间可以互相转换,此模式让算法的变化独立于使用算法的客户。
设计原则:
1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
2.针对接口编程(针对超类)而不是针对实现编程。
3.多用组合少用继承。
?
抽象出来的飞行行为:
class="java" name="code">public interface FlyBehavior { void fly(); }
?
具体的不同飞行行为:
public class FlyWithLag implements FlyBehavior{ @Override public void fly() { System.out.println("用脚去飞~"); } }
?
public class FlyWithSwing implements FlyBehavior { @Override public void fly() { System.out.println("会用翅膀飞~"); } }
?
抽象Duck类
public abstract class Duck { //使用组合的方式 private FlyBehavior flyBehavior; public Duck(FlyBehavior flyBehavior) { this.flyBehavior = flyBehavior; } public void displayFlay(){ flyBehavior.fly(); } }
?
具体的不同类Duck
public class YellowDuck extends Duck{ public YellowDuck(FlyBehavior flyBehavior) { super(flyBehavior); } }
?
public class BlackDuck extends Duck { public BlackDuck(FlyBehavior flyBehavior) { super(flyBehavior); } }
?
测试类:
public class DuckTest { public static void main(String[] args) { Duck blackDuck = new BlackDuck(new FlyWithSwing()); blackDuck.displayFlay(); //输出: 会用翅膀飞~ Duck yellowDuck = new YellowDuck(new FlyWithLag()); yellowDuck.displayFlay(); //输出: 用脚去飞~ } }
?