【机房重构】下机——职责链模式+策略模式(理论篇)

前言

    第一次机房收费系统的时候,我们侧重于功能的实现,对于大范围的使用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:数据类型问题(避免数据类型不一致产生的问题)

(1)上机时间和下机时间都是“time”类型
(2)消费时间是“integer”类型

four:三种下机——观察者模式     

    对于三种下机模式,我们也可以使用一种设计模式来是实现,那就是观察者模式,具体为什么,大家可以自己去思考。


三、具体代码展示


小结

    学习上远离舒适区要求我们多实践新学习的内容,不断突破自己,不断提高自己,让自己可以越来越快的适应新知识的从理论到实践的过程。

猜你喜欢

转载自blog.csdn.net/ljl55555/article/details/71374742