状态模式(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的行为。


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w302974215/article/details/49904941

Java设计模式——状态模式(STATE PATTERN)

场景一 描述:现在城市发展很快,百万级人口的城市一堆一堆的,那其中有两个东西的发明在城市的发展中起到非常重要的作用:一个是汽车,一个呢是...,猜猜看,是什么?是电梯!汽车让城市可以横向扩展,电梯让城...
  • u012401711
  • u012401711
  • 2016-09-26 23:45:36
  • 4689

设计模式 - 状态模式(state pattern) 详解

状态模式(state pattern) 详解本文地址: http://blog.csdn.net/caroline_wendy状态模式(state pattern): 允许对象在内部状态改变时改变它的...
  • u012515223
  • u012515223
  • 2014-07-11 17:42:30
  • 2199

"围观"设计模式(21)--行为型之状态模式(State Pattern)

状态模式--允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。----百度百科 个人理解 状态模式应该说可以理解为某种状态下,程序的执行流程可能会发生变化,类...
  • wangyang1354
  • wangyang1354
  • 2016-06-13 15:11:04
  • 3521

我所理解的设计模式(C++实现)——状态模式(State Pattern)

看看我们平时用的开关,同样一个开关他有2种状态:开和关,当她处于不同的状态的时候她的行为是不一样的,比如当她是开着的时候,你按她一下,她就变成了关闭状态,她是关着的时候按她一下,她就变成了开着的状态。...
  • LCL_data
  • LCL_data
  • 2013-08-24 07:44:20
  • 11951

C#设计模式系列:状态模式(State)

1、状态模式简介 1.1>、定义   状态模式的核心思想是允许一个对象在它的内部状态改变时改变它的行为,即不同的状态对应不同的行为。   状态模式的针对性很强,当有状态变化的时候可以...
  • qq_36565626
  • qq_36565626
  • 2018-02-07 17:15:11
  • 482

设计模式(行为型)之状态模式(State Pattern)

状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时可以使用状态模式。状态模式将一个对象的状态...
  • yanbober
  • yanbober
  • 2015-05-05 15:32:56
  • 4237

Head First 设计模式 (十) 状态模式(State pattern) C++实现

  • 2013年05月05日 00:25
  • 1.52MB
  • 下载

设计模式之十 --- 状态(State)模式

【1】基本概念          状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。【2】简单分析         我们先来看下该设计模式的UML的结构图...
  • cjjky
  • cjjky
  • 2012-05-20 19:04:00
  • 15784

设计模式 -- 状态模式(State)

理解 状态模式一般运用在一个对象在某些条件下能触发一些不同的行为的情形。其实系统开发中到处都充斥着这些情形,初学者往往都是习惯性的用面向过程的思维方式解决问题,往往看到模块中if .. else .....
  • u010223072
  • u010223072
  • 2016-06-26 15:39:45
  • 2534

状态模式State(对象行为型)

转自:http://blog.csdn.net/hguisu/article/details/7557252 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理...
  • song_hui_xiang
  • song_hui_xiang
  • 2016-02-17 10:40:19
  • 847
收藏助手
不良信息举报
您举报文章:状态模式(State Pattern)
举报原因:
原因补充:

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