zoukankan      html  css  js  c++  java
  • 设计模式之策略模式

        策略模式也是行为模式的一种。

        意图:定义一系列的算法,把它们一个一个封装起来,并使它们可以相互替换。本模式使得算法可以独立于使用它的客户而变化。
     
        场景:使用GOF中的场景来说明,许多算法可以对一个正文流换行,将这些算法硬编码到使用它的类中是不可取的,原因如下:
     
            1. 需要换行的客户程序如果直接包含换行代码的时候会很复杂,并使得客户程序复杂到难以维护,尤其是需要支持多种算法时情况会急剧恶化。
     
            2. 不同的时候需要不同的换行算法,我们不想支持我们不使用的算法。
     
            3. 当换行功能是客户程序一个难以分割的成分时,增加新的换行算法或改变已有的将会十分苦难。
     
        现在的解决方案就是定义一些类来封装这些算法,从而避免这个问题,一个封装算法成为一个策略。
     
        
     
        适用性:
     
            1. 许多相关类仅仅是行为有异
     
            2. 需要使用一个算法的不同变体
     
            3. 算法使用客户不应该知道的数据,如此可以避免暴漏数据
     
            4. 可以用来替代IF语句
     
        与状态模式的区别:
     
            状态模式与策略模式可以说是非常的类似,但其使用场景是不同的,状态模式针对的是存在状态转换的情况,而且对象的行为依赖于状态,并可以在其中加入状态管理的特性。
     
            策略模式偏重于算法实现,它关系的是算法配置。
     
        实际使用:
     
            在现有项目中没有找到策略模式的准确实现,但是找到了类似的使用场景:系统A需要从系统B上获取数据,可能会通过不同的接口,如Web接口,文件接口,API等,每种实现可以看做是策略的具体实现类,并在调用方根据需求调用,这种调用可以是硬编码,也可以根据相关逻辑使用反射来实现配置。
     
        

     

  • 相关阅读:
    QT插件开发方式(作者有RemOjbects文档翻译(48)篇)
    qobject_cast<QPushButton*>(sender()) 简化信号与槽的编写(sender()取得发信号的对象后,就取得了它的全部信息,为所欲为)
    Qt:无标题栏无边框程序的拖动和改变大小
    Layui 是一款采用自身模块规范编写的国产前端UI框架(5600个Star)
    可靠、高吞吐架构基础改造
    MVC数据验证使用小结
    .NET面试问答集锦
    jQuery插件开发
    c#中运行时编译时 多态
    javascript变量的作用域
  • 原文地址:https://www.cnblogs.com/jiyuqi/p/4506265.html
Copyright © 2011-2022 走看看