设计模式笔记之策略模式

 时间:2024-10-13 04:04:10

1、策略模式定义:定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化不会影响到使用算法的客户。UML 类图如下。定义类图来埠们萁猕自《大话设计模式》一书。由图可知有三个角色: 1. Context角色,用以引用Strategy;2.Strategy角色,是算法的抽象,一般是接口或者抽象类;3.ConcreteStrategy角色, 包装了具体算法。

设计模式笔记之策略模式

2、本程序UML类图如下。IPromotion接口代表Strategy角色,PromotionDiscount类、PromotionReturn类和PromotionNormal类实现该接口,分别对应打折类优惠、满减类优惠和无优惠正常收费。CashierContext类代表Context角色。

设计模式笔记之策略模式

3、IPromotion接口非常简单,只需要一个根据传入金额返回优惠后金额的函数returnCalMoney即可。具体接口以及类代码如下。

设计模式笔记之策略模式

4、CashierContext为IPromotion使用者,两者是聚合关系。构造函数接受一个IPromotion实例。

设计模式笔记之策略模式

5、我们再创建一个测试函数。其实一般来说,收银员输入金额,从下拉框中选择优惠政策(无优惠为默认),然后点击收银即可。我们这里就简而化之了。运行查看结果。

设计模式笔记之策略模式

6、策略模式基本构成就这样了,但是我们发现一个问题,这个时候,我们是让客户端去选择短铘辔嗟具体的算法(main函数中case语句),这样我们添加算法的时候需要修改客户端,没有达到本来的目的。这里可以采用简单工厂模式,将case语句放入CashierContext中以降低耦合。可以看到,这个时候客户端只需要认识一个CashierContext类即可。

设计模式笔记之策略模式

7、当然,如果我们要将“打九折”修改为“打七折”,这个时候就必须修改CashierContext中switch中case语句。这个问题可以采用反射技术来解决。当然,这个不是本篇经验要讨论的问题,请参考我的其它经验。

  • 设计模式之策略模式
  • 设计模式:策略模式
  • 设计模式笔记——命令模式的学习
  • 设计模式笔记之命令模式
  • 设计模式笔记之组合模式
  • 热门搜索
    讲普通话 写规范字手抄报 阅读手抄报的内容 三爱三节手抄报内容 五水共治手抄报图画 我爱校园手抄报 法制进校园手抄报 礼仪手抄报 做文明人手抄报 关于三月三的手抄报 向英雄致敬手抄报