《Head First 设计模式》之策略模式——鸭子行为

策略模式(Strategy Pattern)

  ——定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

(每个功能的多种实现成为一个算法族,这些算法族被分别封装。)

  • 基础:抽象、封装、多态、继承
  • 特点:把可以替换的算法步骤封装成一个个算法族,供运行时动态选择
  • 原则
  1. 封装变化。(把会变化的部分抽出来封装)
  2. 多用组合,少用继承。("has-a" is better than "is-a")
  3. 针对接口/超类型编程,不针对实现编程。(多态)
  • 示例

 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         }
原文地址:https://www.cnblogs.com/-1307/p/6432221.html