zoukankan      html  css  js  c++  java
  • 内功心法-策略模式

    策略模式

    在策略模式(Strategy Pattern)中,一个类的行为或其算法可以再运行时更改,这种类型的设计模式属于行为型模式。

    在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象,策略对象改变context对象的执行算法。


    介绍

    • 意图:定义一系列的算法,把他们一个个封装起来,并且使他们可相互替换

    • 主要解决:在有多重算法相似的情况下,使用if...else...所带来的复杂和难以维护

    • 何时使用:一个系统有许多许多类,而区分他们的只是他们直接的行为

    • 如何解决:讲这些算法封装成一个一个类,任意替换

    • 关键代码:实现同一个接口

    • 应用实例:

      1. 诸葛亮的锦囊妙计,每一个锦囊就是一个策略
      2. 旅行的出游方式,选择自行车,汽车,每一种旅行方式都是一个策略
      3. java中 awt中的LayoutManagert
    • 优点:

      1. 算法可以自由切换
      2. 避免使用多重条件判断
      3. 扩展性良好
    • 缺点

      1. 策略类会增多
      2. 所有策略类都需要对外暴露
    • 使用场景:

      1. 如果在一个系统里面有许多类,他们之间的区别仅在于他们的行为,那么使用策略可以动态地让一个对象在许多行为中选择一种行为。

      2. 一个系统需要动态地在集中算法中选择一种

      3. 如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现

    • 注意事项:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题


    实现

    • 这是一个实现支付方式的demo
    1. 支付方式有很多种,先设置一个抽象的支付类
    2. 其他所需要的具体的支付方式继承抽象支付类
    3. 定义策略,分配支付方式
    4. 一个订单类,在下订单时确定使用什么支付方式,调用支付策略
    5. 主方法,下订单,使用策略模式选择支付方式

  • 相关阅读:
    Tomcat:-Djava.net.preferIPv4Stack=true只支持ipv4
    centos解决bash: service: command not found 错误
    centos8重启网络服务
    项目中使用的二维码图片无法展示,查看图片链接报错500
    ERROR: ld.so: object ‘/usr/local/lib/libs.so‘ from /etc/ld.so.preload cannot be preloaded: ignore
    设置好ftp后用xftp连接提示无法打开,无法显示远程文件夹
    Linux 查看登录日志及登录失败用户的ip
    accept4() failed (24: Too many open files)
    [Err] 2006
    webpack loader配置篇
  • 原文地址:https://www.cnblogs.com/mengjie1001/p/11175612.html
Copyright © 2011-2022 走看看