个人重构——职责链模式PK状态模式

背景:在上一篇博客《个人重构——职责链模式》中就对重构中用到的模式进行总结,可是在前两天的师父验收系统中,当让我自己对职责链模式描述时,师父竟说,听着怎么跟状态模式类似啊!于是,才有了这篇博客的诞生。

        1·自我理解:

职责链模式:一个事物的所处状态依靠另外一系列的事物处理后返回的结果。

状态模式:一个事物本身的行为根据状态变化而变化。

共同点:减少使用复杂的条件逻辑判断,吧状态的判断逻辑转移到便是不同状态的一系列类当中,可以把复杂的逻辑判断简单化。

举个例子说明:一个人,早上6点起床,7点吃饭,8点上课。那个利用状态 模式说明的话,就是这个人所处的到底是起床,吃饭还是上课这个行为,是根据这个人所处的时间段。而如果利用职责链模式的话,就是发出一个请求:“我现在在干嘛?”,然后起床,吃饭,上课这三个具体类一一对这个请求做出回应,在具体类中判断时间,然后返回此时此刻这个人在干嘛。所以,按照我的理解,状态模式是可以和职责链模式互换的。

2·类图对比:

职责链模式:


状态模式:


分析类图:两个类图大体上看没有什么区别。但是还是有细微差别。在状态模式中,又加入一个onlinetime类,该类的作用就是增加一个方法SetNext,该方法功能依旧是设置上下级,你可能会问:在职责链模式中不是也有这个方法吗?这就涉及到第二个微妙之处:OnlineTime类和OnlineTimeStateBLL抽象类之间的“聚合关系”,该关系表示这类与类之间的一种“has a ”的关系,也就是说,当准备时间,至少上机时间,递增时间类分别处理消费时间时,直接在具体类中调用onlinetime类的设置上下级的方法,把此方法写死在具体类中,而对比于此处,职责链只是在客户端设置上下级,相对要灵活一些。

自己的理解还是有所欠缺,我会在进一步学习中来更深入了解他们之间的关系。


评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值