zoukankan      html  css  js  c++  java
  • 《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         }
  • 相关阅读:
    ssi服务器端指令
    json格式的转换为json字符串函数
    接口测试基础和jmeter
    【JZOJ6274】梦境
    【JZOJ6275】小L的数列
    【luoguP4721】分治 FFT
    【luoguP3868】猜数字
    中国剩余定理与扩展中国剩余定理
    【JZOJ6277】矩阵游戏
    【JZOJ6271】锻造 (forging)
  • 原文地址:https://www.cnblogs.com/-1307/p/6432221.html
Copyright © 2011-2022 走看看