命令模式,状态模式和职责链模式的不同

转载 2015年07月06日 21:36:27
命令模式:将多个命令只提交给一个执行该命令的对象
而职责链模式相反:只将一个请求提交给多个能执行该命令的对象

状态模式与职责链模式的区别:
状态模式是让各个状态对象自己知道其下一个处理的对象是谁,即在编译时便设定好了的;

而职责链模式中的各个对象并不指定其下一个处理的对象到底是谁,只有在客户端才设定。

转自:http://bbs.csdn.net/topics/300013197

职责链模式:当客户提交一个请求时,请求是沿链传递直至有一个ConcreteHander对象负责处理它。接收者和发送者都没有对方的明确信息,且链中的对象自己并不知道链的结构,在运行时自动确定。结果是职责链可简化对象的相互连接,它们仅需保持一个指向其后继者的引用或指针,而不需要保持它所有的候选接受者。这也就大大降低了耦合度了。也就是说,我们可以随时地增加或修改处理一个请求的结构。增强了给对象指派职责的灵活性。

状态模式:状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。状态模式将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。即将特定的状态相关的行为都放入一个对象中,由于所有与状态相关的代码都存在于某个ConcreteState中,所以通过定义新的子类可以很容易地增加新的状态和转换。这样做的目的是为了消除庞大的条件分支语句。状态模式通过把各种状态转移逻辑分布到State的子类之间,来减少相互间的依赖。

个人认为,职责链模式与状态模式的最大的不同是设置自己的下一级的问题上,状态模式是在类的设计阶段就定好的,不能在客户端改变,而职责链的下一级是在客户端自己来确定的。这样各有什么优缺点呢?

在类的设计阶段设定(状态模式)的好处是不用客户来确定下一状态,也就减少了客户设置错误的问题,客户也不用知道状态的具体结构,同时存在灵活性差,耦合度高的问题,从上面的例子可以看到,因为作用域的问题,ConStateC一定要写在ConStateB之前,ConStateB一定要写在ConStateA之前,顺序不能乱。而在客户端设定(职责链模式)要求客户对各个类的职责要有所了解,并能正确设置好职责链,并加大设置出错的风险。但是它也比较灵活,也不存在刚才在状态模式中说的耦合和作用域问题。

转自:http://blog.csdn.net/ljianhui/article/details/8302415

相关文章推荐

职责链模式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
  • 下载

职责链模式

  • 2012-09-29 23:46
  • 298KB
  • 下载

职责链模式(python)

职责链模式:将能处理请求的对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理请求为止,避免请求的发送者和接收者之间的耦合关系。 #encoding=utf-8 # #by panda...

职责链模式PPT带源码

  • 2014-12-05 12:49
  • 234KB
  • 下载

职责链模式----主界面显示

职责链模式,十多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一个链。并沿着这条链传递该请求,知道有一个对象处理它为止。          这是对职责链的模式的解释...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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