策略模式 C#版
(先放git地址:https://github.com/USuperMe/StrategyModel)
上一篇分享了简单工厂模式,看图回顾一下其原理:
补充一下简单工厂模式的优缺点:
优点:
1实现了创建和使用的分离
2.客户端无需知道实际创建的类,只需要和工厂类打交道就可以
缺点:
-
工厂类(Factory)职责过多,一旦需要添加新的产品,需要再工厂类中增加新的处理。
-
违反了开放封闭原则。
接下俩本篇分享的内容,策略模式:
首先分析一下需求,商场需要一个计费机(忽略新兴的微信支付),输入单价、数量计算得出商品的总价,首先极简的实现方式(控制台应用程序):
但是商场需要吸引并留住顾客,就需要采取一些策略来进行促销、打折之类的活动,比如过年:所有商品一律清仓大甩卖,八折起;五一黄金周大促,全场一律买一送一;国庆假日嗨翻天,买300返100;双十一全民狂欢,买手机,送 老婆;emmmm,原来那个不能用了,需求真尼玛多,然后第二版如图:
其实,具体的计算过程还是集中在了主程序入口中实现了,想一想之前的简单工厂模式,有什么地方可以改进一下:
1.首先把收费这个类抽象出来,只负责收费:
2.正常收费:
3.打折收费:
4.返利收费子类
5.现金收费的工厂类:
修改客户端程序入口的调用:(简单工厂模式实现)
下面基于本篇的策略模式实现:
首先看策略模式的原理图:
首先把不同的实现方法提取出来,分别在不同的类下实现相应的算法:
实现一个上下文类,用来在程序主入口处实现对不同类别的算法进行选取:
接着在主程序入口中可以这样实现:
运行控制台应用程序,输出如下所示:
由于项目使用的是:Microsoft Visual Studio Code 创建的,需要运行控制台应用程序,需要在powershell 的当前目录下输入:dotnet run 命令,如果需要创建一个控制台应用程序,输入命令:dotnet new console 即可