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

转载 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

三分钟理解“状态模式”——设计模式轻松掌握

什么是状态模式? 一个函数原本有很多判断语句,现在把判断语句中的每一种状态封装成一个类,每一个状态类中均有一个handle()函数,该函数能对当前状态做出处理,并且能指明不能处理时的下一个状态类。 ...
  • u010425776
  • u010425776
  • 2015年09月06日 16:00
  • 687

状态模式和策略模式的区别

区别主要体现在行为上,而不是结构上,所以,看时序图就能很好的看出两者的区别。状态是系统自身的固有的,调用者不能控制系统的状态转移。策略是外界给的,策略怎么变,是调用者考虑的事情,系统只是根据所给的策略...
  • ruangong1203
  • ruangong1203
  • 2016年09月12日 16:54
  • 1377

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

命令模式:将多个命令只提交给一个执行该命令的对象 而职责链模式相反:只将一个请求提交给多个能执行该命令的对象 状态模式与职责链模式的区别: 状态模式是让各个状态对象自己知道其下一个处理的对象...
  • u010585135
  • u010585135
  • 2015年07月06日 21:36
  • 687

状态模式

在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context ...
  • qq_38131668
  • qq_38131668
  • 2018年02月05日 22:05
  • 9

状态模式与职责链模式

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

状态模式 VS 职责链模式

这次合作开发过程中我们使用了一些设计模式,经过讨论对其理解深刻不少。之前在学习之中,我本以为自己已经理解了一些设计模式。但在这次的使用过程中,因为各自的理解不一造成了一定的碰撞,之后才发现自己的理解根...
  • zhuojiajin
  • zhuojiajin
  • 2013年12月05日 11:09
  • 2569

23种设计模式4--行为型模式(策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式)

总体来说设计模式分为三大类:   创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。   结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组...
  • oChangWen
  • oChangWen
  • 2017年06月18日 23:29
  • 894

23种设计模式4--行为型模式(策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式)

总体来说设计模式分为三大类:     创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。     结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式...
  • oChangWen
  • oChangWen
  • 2016年05月30日 23:44
  • 806

设计模式之策略模式与状态模式的区别

转策略模式与状态模式的比较状态模式(state pattern)和策略模式(strategy pattern)的实现方法非常类似,都是利用多态把一些操作分配到一组相关的简单的类中,因此很多人认为这两种...
  • u011040361
  • u011040361
  • 2015年04月19日 17:46
  • 846

c++设计模式之(状态模式和责任链模式)的实现

c++的设计模式系列分为以下几种: //按照目的来分,有:  (1)创建型模式:处理对象的创建过程 (2)结构型模式:处理类或者对象的组合 (3)行为型模式:对怎样交互和分...
  • Strong_HCyouth
  • Strong_HCyouth
  • 2016年11月30日 15:40
  • 511
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:命令模式,状态模式和职责链模式的不同
举报原因:
原因补充:

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