状态模式(State Pattern)

原创 2015年11月18日 11:58:18

状态模式(State Pattern)是设计模式的一种,属于行为模式。


定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 

状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。 

意图:允许一个对象在其内部状态改变时改变它的行为 

适用场景: 

1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。 

2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。

优缺点

A它将与特定状态相关的行为局部化,并且将不同状态的行为分割开来

B它使得状态转换显式化

CState对象可被共享

D状态模式的使用必然会增加系统类和对象的个数

E状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱


策略模式和状态模式

这两个模式的类图是类似的,它们的差别在于它们的意图。

策略模式是围绕可以互换的算法来创建成功业务的,而状态模式通过改变对象内部的状态来帮助对象控制自己的为。

策略模式中,客户通常主动指定Context所要组合的策略对象时哪一个。

策略模式让我们具有弹性,能够在运行时改变策略,但对于某个context对象来说,通常都只有一个最适当的策略象。

状态模式中,我们将一群行为封装在状态对象中,context的行为随时可以委托到那些状态对象中的一个。随着时间的流逝,当前状态在状态对象集合中游走改变,以反映出context内部的状态,因此,context的行为也会跟着改变。

但是context的客户对于状态对象了解不多,甚至根本是浑然不觉。

 

一般来说,我们把策略模式想成是除了继承之外的一种弹性替代方案。如果你使用继承定义了一个类的行为,你将被这个行为困住,甚至要修改它都很难。

有了策略模式,你可以通过组合不同的对象来改变行为。

我们把状态模式想成是不用在context中放置许多条件判断的替代方案。

通过将行为包装进状态对象中,你可以通过在context内简单地改变状态对象来改变context的行为。


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

相关文章推荐

状态模式(State Pattern)

原文地址:http://www.iteye.com/topic/503075 状态(State Pattern)模式:又称为状态对象模式,状态模式是对象的行为模式 状态模式允许一个对象在其内部状态...

State Pattern状态模式(三)

状态模式允许对象在内部状态改变时,改变它的行为。P410类图 #include using std::cout; using std::endl; //***************...
  • yaked
  • yaked
  • 2015-07-02 20:43
  • 335

状态模式(State Pattern)

状态模式(State Pattern): 当一个对象的内在状态变化时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态转换的条件过于复杂时的情况。把状态的判断逻...

状态模式在领域驱动设计中的使用(Using the State pattern in a Domain Driven Design)

领域驱动设计是软件开发的一种方式,问题复杂的地方通过将具体实现和一个不断改进的核心业务概念的模型连接解决。这个概念是Eric Evans提出的,http://www.domaindrivendesig...

状态模式【State Pattern】

现在城市发展很快,百万级人口的城市一堆一堆的,那其中有两个东西的发明在城市的发展中起到非常重要的作用:一个是汽车,一个呢是...,猜猜看,是什么?是电梯!汽车让城市可以横向扩展,电梯让城市可以纵向延伸...

状态模式【State Pattern】

现在城市发展很快,百万级人口的城市一堆一堆的,那其中有两个东西的发明在城市的发展中起到非常重要的作用:一个是汽车,一个呢是...,猜猜看,是什么?是电梯!汽车让城市可以横向扩展,电梯让城市可以纵向延伸...

状态模式(State Pattern)

State模式的定义: 不同的状态,不同的行为;或者说,每个状态有着相应的行为. 何时使用? State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elseif else ...

状态模式(State Pattern)

模式动机: 1、在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的 (stateful)对象,这样的对象状态是从事先定义好的一系列值中取出...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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