【机房重构】下机——职责链模式+策略模式(理论篇)
前言
第一次机房收费系统的时候,我们侧重于功能的实现,对于大范围的使用if...else,没有太明显的感觉。可当我们学完设计模式之后,才发现原来多次使用if...else,会使程序产生很高的耦合性,不便修改。对于同样的下机内容,我们除了要用到七层的知识,可能最大的收获就是去学习如何把设计模式运用到实践中去了。
主要内容
一、相关设计模式简介
职责链模式(Chain of Responsibility)
(1)含义:
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。(举个栗子:加薪非要老总批)
(2)结构图
策略模式(Strategy)
(1)含义:
它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。(举个栗子:商场促销)
(2)结构图
二、应用(下机消费金额的计算)
1.设计模式用到哪?
职责链模式解决的主要问题是:确定消费时间属于哪个时间段(t<准备时间,准备时间<t<至少上机时间,t>至少上机时间)
策略模式解决的主要问题是:根据用户类型确定使用的金额计算策略
2.常见问题
one:在实践过程中,对我来说最大的问题就是不知道参数传哪些?
其实分析一下不难知道:
消费时间的确定(职责链模式):
(1)上机时间和下机时间(也就是下机对应的实体);
(2)准备时间和至少上机时间(基本数据设定的实体)
用户类型的确定(策略模式):
(1)固定用户单位费用和临时用户单位费用(基本数据设定的实体)--确定金额计算策略
(2)消费时间(职责链模式求得)
two:消费时间微大于至少上机时间时,如何确定消费金额?
(1)之前--超过至少上机时间的部分按照上机分钟数算,结果四舍五入。这样做可能出现一个问题:当分钟数足够小时,消费金额会被舍掉。
(2)针对上面一个问题,我给程序设定了一个最低消费金额,避开了上机不扣费的情况。
three:数据类型问题(避免数据类型不一致产生的问题)
four:三种下机——观察者模式
对于三种下机模式,我们也可以使用一种设计模式来是实现,那就是观察者模式,具体为什么,大家可以自己去思考。
三、具体代码展示
小结
学习上远离舒适区要求我们多实践新学习的内容,不断突破自己,不断提高自己,让自己可以越来越快的适应新知识的从理论到实践的过程。