状态模式 VS 职责链模式

原创 2013年12月05日 11:09:48

   这次合作开发过程中我们使用了一些设计模式,经过讨论对其理解深刻不少。之前在学习之中,我本以为自己已经理解了一些设计模式。但在这次的使用过程中,因为各自的理解不一造成了一定的碰撞,之后才发现自己的理解根本就站不住脚。于是,反复经过我们的讨论——实施——再讨论,发现理解的偏差,解决之。然后,才有了目前我们认为的比较稳定的,符合逻辑的理解。本篇博客要说的是我对状态模式和职责链模式的理解。这两个设计模式看上去不一样,实施起来却又貌似很相似,所以不认真的话很容易迷糊。 

 

   状态模式:我们用于学生上机时的判断。四个子状态分别为:卡号不存在(CardNoExitStateBLL),卡号存在余额不足(LeastCashStateBLL),卡号已上机(isOnlineStateBLL),上机成功(SuccessOnlineBLL)。

 

 

    职责链模式:用于删除用户时,对用户是否还有未结的帐,是否在线的检查判断。四个管理者子类分别为:用户是否在线(IsworkingHandlerBLL),是否有未结账的充值(RechargeIsCheckHandlerBLL),退卡是否有未结的账(CancelCardISCheckHandlerBLL),注册是否有未结的帐。

 

 

相同点:

   两个设计模式从类图结构上粗看是完全不一样的。但是实际上在处理一个问题时各个类之间的通信或者说任务递交是一样的,都是链式的一个顺序。特别是在代码上实现时,稍不注意两个模式就会混为一谈,因为图上的巨大区别反应在代码是只有关键的一句或者几句。这种在实现上的理解模糊很让人难受。由于两个模式加起来代码比较长,那么下面配两幅图来说明这个两个模式的区别。

 

   状态模式:实际上子状态是从单个类中独立出去的,因此其整体的功能是一个完整的类的功能。只不过我们把这个类对不同情况的响应写在了一个类中,致使其扩展性不好。所以我们,才把它的不同响应行为独立成状态子类,以赋予它良好的对新需求的扩展性。其本质是,一个类对不同状态的多种不同响应。

 

 

   职责链模式:实际上是在应对处理一个或者一类问题上的结构性优化。是多个管理者在处理一个问题上森严的等级关系。每个管理者,都只有能处理或者不能处理两种情况。那么,管理者或者说等级关系可能是不稳定的。职责链的本质是,不同的类对同一个问题的反应。

 

 

    不同点:从以上两幅图可以清楚的看出来,状态模式的子类只负责改变其拥有类的状态属性,而不负责去执行下一个状态的方法。执行还需要通过拥有他的类去调用下个状态子类的方法。而职责链模式的每个管理者则是既负责处理问题也负责请求的递交。这是,我觉得他们最大的区别。这两个模式是从一个问题的不同的角度的处理。一个从问题的角度,一个从处理者的角度。

 

    总结:三个凑皮匠顶个诸葛亮,学习还是需要不同的理解的碰撞,才能够引起新的思考。若不然,则会再自己的思维模式中钉死。

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

TraceView android 性能优化工具

TraceView界面 现来看一下整个界面的图,整个界面包括上下两部分,上面是你测试的进程中每个线程的执行情况,每个线程占一行;下面是每个方法执行的各个指标的值 上面一部分是你测试进程的中每个线程...

SpringMVC学习总结(六).异常处理解析器

HandlerExceptionResolver     • Spring MVC通过HandlerExceptionResolver处理程序的异常,包括Handler 映射、数据绑定以及目标方...

职责链模式VS状态模式

今天来进行其他两个模式的对决,1号选手职责链模式,2号选手状态模式。开始对决:职责链模式VS状态模式。 首先来看看1号选手职责链模式的简介,它的定义为:使多个对象都有机会处理请求,从而避免请...

状态模式与职责链模式

在学习设计模式的时候发现状态模式与职责链模式特别的相似,当时没有能理解,现在回过头来看了看,查 了查资料,明白了一点,先把自己的理解写下来,在以后的学习继续深入学习 一、状态模式 ...

深入浅出设计模式(十二):18.职责链模式(Chain of Responsibility)19.状态模式(State)20.解释器模式(Interpreter)

18.职责链模式(Chain of Responsibility)职责链模式在程序应用中十分广泛,经常使用在公文审批、出差报支等地方,职责链模式的作用就是将对象各自处理的职责分开,虽然职责很多,但最终...

第17章_职责链模式

  • 2012年09月27日 10:33
  • 1.03MB
  • 下载

职责链模式PPT带源码

  • 2014年12月05日 12:49
  • 234KB
  • 下载

职责链模式(一):采购单的分级审批

“对二”,“过”,“过”……这声音熟悉吗?你会想到什么?对!纸牌。在类似“斗地主”这样的纸牌游戏中,某人出牌给他的下家,下家看看手中的牌,如果要不起上家的牌则将出牌请求再转发给他的下家,其下家再进行判...
  • Mark_LQ
  • Mark_LQ
  • 2015年09月07日 17:53
  • 806

Objective C职责链模式设计源码

  • 2012年08月15日 15:56
  • 56KB
  • 下载

职责链模式模型代码

  • 2012年03月26日 16:28
  • 21KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:状态模式 VS 职责链模式
举报原因:
原因补充:

(最多只允许输入30个字)