• 设计模式之策略模式


    策略模式将可变的部分从程序抽象分离成算法接口,在该接口下分别封装一系列算法实现。这样不同的算法之间可以互相替换,使客户端可以独立这些算法。

    根据面向对象的编程思想,我们通常会采用以下方式解决问题。

    1. 继承父类

      优点:相同场景下代码复用率高

      缺点:容易忘记代码的复写,不灵活,不同场景下代码复用率低

    2. 抽象

      优点:由子类覆写父类的抽象方法,比较灵活

      缺点:代码复用率低

    3. 组合

    "组合优先于继承"。在类中增加一个私有域,引用另一个已有类的实例,通过调用引用实例的方法获得新的功能,这种设计成为组合。

    优点:代码复用率高,易于维护;架构灵活;富有弹性,可以较好适应变化,"开闭原则";消除大量条件语句;

    缺点:在客户端程序中需要注入一个具体的strategy算法实现类,客户代码需要了解每一个策略实现的细节;增加了对象的数目。

    策略模式的设计原则

    • 我们找出需求中需要变化的部分,将它们独立出来,而不是与其他代码混合在一起。
    • 面向接口,而不是面向实现编程。通过多态的方式,来适配不同的处理方式。
    • 多用组合,少用继承。

    策略模式实现步骤

    • 通过分离变化得到策略接口strategy
    • 为策略接口提供实现类
    • 客户端程序持有该策略接口
    • 在客户端程序中正确选择并组装调用strategy的实现类

    使用场景

    • 许多相关的类仅仅是行为差异
    • 运行时选择不同的算法变体
    • 通过条件语句在多个分支中取其一
  • 相关阅读:
    《TZOJ1546》
    css3的基本样式
    PHP连接mysql数据库,并将取出的数据以json的格式输出
    使用ajax获取JSON数据的jQuery代码的格式
    使用构造函数来判断一个对象是数组还是日期
    js(jquery)代码在页面上实时地显示时间
    点分治总结
    线性基,高斯消元总结
    网络流总结
    后缀数组总结
  • 原文地址:https://www.cnblogs.com/cqumonk/p/4119326.html
Copyright © 2020-2023  润新知