设计模式中的状态模式相对比较简单,简单的说就是对某个对象的状态进行管理.对象的状态如果的多的话,假如没有对其进行管理,极易造成管理混乱。从而使系统难以维护,所以State模式的意图就是将与状态有关的处理逻辑分散到代表对象状态的各个类中。这样的模式应用在用于多状态的系统中,如游戏开发者就经常用到这种状态模式。

下面举出一个小小的例子来说明这样的一个问题:

如游戏玩家从开始进行游戏到玩某个游戏时,这里面发生了多种状态的变化,同时也改变了一些隐藏的游戏状态。我们设计如下代码:

public abstract class Player {//玩家当前的游戏状态public int state;//玩家的其他状态1public int otherState1;//玩家的其他状态2public int otherState2;public void init() {}public void play() {}public void resume() {}public void reset() {}public int getState() {return state;}public void setState(int state) {this.state = state;}public int getOtherState2() {return otherState2;}public void setOtherState2(int otherState2) {this.otherState2 = otherState2;}public int getOtherState1() {return otherState1;}public void setOtherState1(int otherState1) {this.otherState1 = otherState1;}
}

面对如此多的玩家状态,我们建立一个PlayerManager来管理玩家的各种状态的变化.同时对于玩家的各种方法进行执行详细的状态变化,从而使玩家Player这个类能够简单明了

public abstract class PlayerManager {public static final int STATE1 = 1 << 1;public static final int STATE2 = 1 << 2;public static final int STATE3 = 1 << 3;public static final int STATE4 = 1 << 4;public static final int STATE5 = 1 << 5;public static final int STATE6 = 1 << 6;protected Player player;public PlayerManager(Player player) {this.player = player;}public void init() {}public void play() {player.setState(STATE3);player.setOtherState2(STATE6);player.play();}public void resume() {player.setState(STATE3);player.setOtherState1(STATE6);player.resume();}public void reset() {}}

如果是对于比如说是QQPlayer,我们就再建立一个QQPlayerManager再行具体化。

小结:

   一般来说,一个对象中各个实例变量的值决定了这个对象的当前状态。在某些情况下,对象的大多数属性一旦设置就不会发生变化;一个属性是动态变化的,并在类的算法逻辑中发挥重要作用。这个属性也许代表整个对象的状态,甚至是命名的state.

在现实生活中有些实体的状态非常关键,诸如事务或者机器,当使用对象这个实体建模时,经常会出现一个极其重要的状态变量。在这种情况下,依赖对象状态的处理逻辑也许会出现在很多方法中。通过学习把状态相关行为迁移到状态对象层次,就可以简化代码。这使得每个状态类都包含应用领域中一个状态的行为。这样一来,状态类便可以直接对应到状态机的状态。

为处理状态之间的转移,可以让中心对象保留对状态集的引用。或者,在状态迁移调用中,可以传递状态正在改变的中心对象。也可以让状态类成为信息提供者,只提示接下来的状态,而无需要新中心对象。不论怎样管理状态迁移,都可以应用State模式将对象的不同状态用一个状态类集合来表示,并将操作分散在这个状态类的集合中,从而简化我们的对象代码。

设计模式之略见一斑(状态模式State)相关推荐

  1. 《研磨设计模式》chap18 状态模式state(1)模式简介

    场景:投票管理 1. 正常编码 //投票管理 public class VoteManager {//记录用户投票的结果,Map<String,String>对应Map<用户名称,投 ...

  2. [设计模式-行为型]状态模式(State)

    一句话 在一个类的对象中维护状态的类的对象 概括 解析 STATE-跟MM交往时,一定要注意她的状态哦,在不同的状态时她的行为会有不同,比如你约她今天晚上去看电影,对你没兴趣的MM就会说 " ...

  3. 《研磨设计模式》chap18 状态模式state(2)模式介绍

    1. 状态的平行性 与策略模式的不同,策略模式的行为是平等的 2. 上下文和状态处理对象 上下文是持有状态的对象,但是上下文自身并不处理跟状态相关的行为,而是把处理状态的功能委托给了状态对应的状态处理 ...

  4. 《研磨设计模式》chap18 状态模式state(4)例子

    public class StateMachine {//持有一个状态对象 private State state = null;//包含流程处理需要的业务数据对象,不知道具体类型,用Object,反 ...

  5. 《研磨设计模式》chap18 状态模式state(3)应用到场景

    public interface VoteState {//处理状态对应的行为 public void vote(String user,String voteItem,VoteManager vot ...

  6. 【转】设计模式 ( 十七) 状态模式State(对象行为型)

    设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...

  7. php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)

    状态模式 (State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类.其别名为状态对象(Objects for States) (一)为什么需要状态模式 ...

  8. c++状态模式state

    c++状态模式state 概念 角色和职责 案例 概念 State模式也叫状态模式,是行为设计模式的一种.State模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样 ...

  9. 【游戏设计模式】之三 状态模式、有限状态机

    转载自:https://blog.csdn.net/poem_qianmo/article/details/52824776 游戏开发过程中,各种游戏状态的切换无处不在.但很多时候,简单粗暴的if e ...

最新文章

  1. c#委托与事件(二)
  2. SQL 高级查询 50题
  3. Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题
  4. 单点登录系统(SSO)和Session共享解释
  5. 风险预测模型_随访78个月,仁济医院完成世界首个间质性肺病风险预测模型
  6. 《黑书》hdu1271递推习题:整数对
  7. asp.net 日期转换
  8. centos6使用bacula备份系统
  9. 物理机是什么?跟云服务器有什么区别
  10. 【风控模型】—WOE与IV指标的深入理解应用
  11. 20款常用的商业智能(BI)工具分享(最新)
  12. 参加口碑最好的广州传智播客Java就业培训班吧
  13. java实现-现奔跑吧小恐龙-小游戏
  14. SLAM中多目三角化
  15. Elasticsearch搜索引擎一些参数含义和用法
  16. 实时大数据处理real-time big data processing (RTDP)框架:挑战与解决方案
  17. iOS事件传递链与响应链
  18. [随笔所想] 学英语打卡2000天碎碎念
  19. 【06.11.27】【世界电影史上影片电影合集】【讯雷下载】
  20. 邢台市工业机器人集成商_十大优秀工业机器人系统集成商分析

热门文章

  1. PYTHON:大整数乘法(分治法)
  2. C# IEnumerator枚举器
  3. 基于STM32单片机的多功能智能时钟【DHT11温湿度传感器蜂鸣器报警12864液晶显示】
  4. Python将.dat文件转换成.csv文件
  5. 小白上路之51单片机(STC89C52)--数码管
  6. 校内论坛csdn开通了
  7. 浪潮“源”AI大模型如何求解数学应用题
  8. 桌面服务器常用命令大全
  9. 酷比魔方i7手写版linux网卡驱动,酷比魔方i7手写板安装Ubuntu 16.04
  10. 台式计算机里的电池有啥用,电脑上的纽扣电池到底有什么用?需要更换吗?