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

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

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

     

  • 相关阅读:
    查看oracle死锁进程并结束死锁
    用windows 定时任务执行kettle的ktr文件,以及问题处理
    Sentinel 高可用流量管理框架
    python
    Excel Vlookup用法和常见报错#REF! #Value!
    OutLook从excel导入联系人
    配置windows server多个用户同时使用一个账户远程服务器
    从Sql Server转战Oracle 之 变量声明
    数据库tempdb的事物日志已满,原因为“ACTIVE_TRANSACTION”
    Chapter 2
  • 原文地址:https://www.cnblogs.com/jiyuqi/p/4506265.html
Copyright © 2011-2022 走看看