策略模式 C#版

来源:互联网 发布:java物流管理系统源码 编辑:程序博客网 时间:2024/06/05 20:49

(先放git地址:https://github.com/USuperMe/StrategyModel)    

上一篇分享了简单工厂模式,看图回顾一下其原理:



补充一下简单工厂模式的优缺点:

优点:

1实现了创建和使用的分离

2.客户端无需知道实际创建的类,只需要和工厂类打交道就可以

缺点:

  1. 工厂类(Factory)职责过多,一旦需要添加新的产品,需要再工厂类中增加新的处理。

  2. 违反了开放封闭原则。

接下俩本篇分享的内容,策略模式:

    首先分析一下需求,商场需要一个计费机(忽略新兴的微信支付),输入单价、数量计算得出商品的总价,首先极简的实现方式(控制台应用程序):


    但是商场需要吸引并留住顾客,就需要采取一些策略来进行促销、打折之类的活动,比如过年:所有商品一律清仓大甩卖,八折起;五一黄金周大促,全场一律买一送一;国庆假日嗨翻天,买300返100;双十一全民狂欢,买手机,送    老婆;emmmm,原来那个不能用了,需求真尼玛多,然后第二版如图:


其实,具体的计算过程还是集中在了主程序入口中实现了,想一想之前的简单工厂模式,有什么地方可以改进一下:

1.首先把收费这个类抽象出来,只负责收费:


2.正常收费:


3.打折收费:


4.返利收费子类


5.现金收费的工厂类:


修改客户端程序入口的调用:(简单工厂模式实现)


下面基于本篇的策略模式实现:

首先看策略模式的原理图:


首先把不同的实现方法提取出来,分别在不同的类下实现相应的算法:


实现一个上下文类,用来在程序主入口处实现对不同类别的算法进行选取:


接着在主程序入口中可以这样实现:


运行控制台应用程序,输出如下所示:



由于项目使用的是:Microsoft   Visual Studio  Code 创建的,需要运行控制台应用程序,需要在powershell   的当前目录下输入:dotnet run 命令,如果需要创建一个控制台应用程序,输入命令:dotnet new console 即可

原创粉丝点击