策略模式(Strategy Pattern)
——定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
(每个功能的多种实现成为一个算法族,这些算法族被分别封装。)
- 基础:抽象、封装、多态、继承
- 特点:把可以替换的算法步骤封装成一个个算法族,供运行时动态选择
- 原则
- 封装变化。(把会变化的部分抽出来封装)
- 多用组合,少用继承。("has-a" is better than "is-a")
- 针对接口/超类型编程,不针对实现编程。(多态)
- 示例
1 public abstract class Duck{ 2 QuackBehavior quackBehavior; 3 FlyBehavior flyBehavior; 4 public Duck(){ 5 } 6 public abstract void display(); 7 public void performQuack(){ 8 quackBehavior.quack; 9 } 10 public void performFly(){ 11 flyBehavior.fly; 12 } 13 public void swim(){ 14 System.out.println("all darks float."); 15 } 16 }
1 public interface FlyBehavior{ 2 public void fly(); 3 } 4 5 public class FlyWithWings implements FlyBehavior{ 6 public void fly(){ 7 System.out.println("i'm flying!"); 8 } 9 } 10 11 public class FlyNoWay implements FlyBehavior{ 12 public void fly(){ 13 System.out.println("i can't fly!"); 14 } 15 }
1 public class MiniDuckSimulator { 2 3 public static void main(String[] args) { 4 5 Duck mallard = new MallardDuck(); 6 mallard.performQuack(); 7 mallard.performFly(); 8 9 Duck model = new ModelDuck();//针对接口编程 10 model.performFly(); 11 model.setFlyBehavior(new FlyRocketPowered());//改变飞行方式 12 model.performFly(); 13 14 } 15 }