24种设计模式学习笔记之策略模式

策略模式(Strategy)

    定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

CashSuper:  收费计算策略抽象类

   正常收费类: 正常收费。acceptCash() 办法 直接返回金额
   打折收费类: 需要在构造器中初始化打折参数   在acceptCash() 办法进行打折计算
   满多少返利类:需要在构造器中初始化 满多少条件 参数。返利多少 参数,acceptCash() 办法进行计算。满足条件,总金额-返利金额=返回金额。

  客户端使用的时候。只需要 new CashContext(“判断参数”)。然后调用 getResult()。得到最终的计算结果。因为  CashContext 类的构造器根据传入的参数已经得到了具体的计算策略对象了。

 何时使用

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

  2. 方法

  • 将这些算法封装成一个一个的类,任意的替换

  3. 优点

  • 算法可以自由切换
  • 避免使用多重条件判断(如果不用策略模式我们可能会使用多重条件语句,不利于维护)
  • 扩展性良好,增加一个策略只需实现接口即可

  4. 缺点

  • 策略类数量会增多,每个策略都是一个类,复用的可能性很小
  • 所有的策略类都需要对外暴露

  5. 使用场景

  • 多个类只有算法或行为上稍有不同的场景
  • 算法需要自由切换的场景
  • 需要屏蔽算法规则的场景

  6. 应用实例

  • 出行方式,自行车、汽车等,每一种出行方式都是一个策略
  • 商场促销方式,打折、满减等
  • Java AWT中的LayoutManager,即布局管理器

猜你喜欢

转载自www.cnblogs.com/xiaoyangxiaoen/p/12360827.html