设计模式中的状态模式相对比较简单,简单的说就是对某个对象的状态进行管理.对象的状态如果的多的话,假如没有对其进行管理,极易造成管理混乱。从而使系统难以维护,所以State模式的意图就是将与状态有关的处理逻辑分散到代表对象状态的各个类中。这样的模式应用在用于多状态的系统中,如游戏开发者就经常用到这种状态模式。
下面举出一个小小的例子来说明这样的一个问题:
如游戏玩家从开始进行游戏到玩某个游戏时,这里面发生了多种状态的变化,同时也改变了一些隐藏的游戏状态。我们设计如下代码:
public abstract class Player {
//玩家当前的游戏状态
public int state;
//玩家的其他状态1
public int otherState1;
//玩家的其他状态2
public 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模式将对象的不同状态用一个状态类集合来表示,并将操作分散在这个状态类的集合中,从而简化我们的对象代码。
分享到:
相关推荐
《21种设计模式略见一斑》这篇文章和配套的"行者买刀21种设计模式详解.pdf"文件,是面向IT专业人士,尤其是软件开发者的一份珍贵资源,旨在深入理解并掌握软件设计中的核心概念——设计模式。设计模式是经验丰富的...
本篇文章将深入探讨“Observer”观察者模式,这是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心概念是主题...
2. **唉声叹气**:表示因情绪低落或痛苦而发出的叹息声,常用于形容忧郁的状态。 3. **按兵不动**:军事策略,指军队在等待最佳时机才采取行动,也可比喻做事拖延。 4. **黯然失色**:形容事物失去原有的光彩,变得...
CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验。它是一类重要的线性分组码,编码...例如我们读软盘上的文件,以及解压一个ZIP文件时,偶尔会碰到“Bad CRC”错误,由此它在数据存储方面的应用可略见一斑
报告的核心内容可从提供的“部分内容”中略见一斑,以下是对报告内容的详细解读: 一、企业竞合策略概述 报告首先介绍了避雷器行业竞合策略研究的背景、研究原则与方法,并阐述了研究企业竞合策略的重要性和实践...
- 黯然销魂:àn rán xiāo hún,形容极度悲伤或失落的状态。 - 飞扬跋扈:fēi yáng bá hù,形容人骄傲自大,举止放肆。 - 甘拜下风:gān bài xià fēng,表示承认别人胜过自己,心服口服。 - 略见一斑...
5. **慷慨激昂**:形容说话时情绪高昂,充满激情,常用于描述演讲或辩论时的状态。 6. **安步当车**:表示以从容不迫的步伐代替乘车,寓意享受过程,不急于求成。 7. **安之若素**:面对困境或挫折时,能泰然处之,...
1. 语文基础知识:题目涉及到词语辨析,如“心酸”与“辛酸往事”,“一般”与“略见一斑”,“过度”与“过渡时期”,“无谓”与“无私无畏”,“家世”与“处理家事”,“明智”与“淡泊明志”,“灌注”与...
《现场活动大屏幕系统v1.1806221》是一款专为现场活动设计的多媒体展示系统,它的核心功能在于提供一个高效、稳定且易于操作的大屏幕展示平台。这款系统能够帮助活动组织者在活动现场实时展示各种信息,如活动进程、...
12. "略见一斑"(lüè jiàn yī bān):从部分看出整体,通过局部了解全局。 13. "暴虎冯河"(bào hǔ píng hé):形容有勇无谋,冒险行事。 14. "有口皆碑"(yǒukǒu jiē bēi):形容人人称赞,具有很高的...
- (3) "我当时的想法,从这几段文字中也可以看出一点" 可以替换为 "言外之意,略见一斑"。 2. 动词填空: - ① "暗夜渐渐__上天空,__上对面的屋顶" 可以填入 "爬上,爬满",表达夜晚降临的情景。"一切都__在朦胧...
10. **略见一斑**:从局部看出事物的一部分特征,了解其大概。 11. **有口皆碑**:所有人都称赞,形容事迹或人品受到普遍赞扬。 12. **并行不悖**:两件事情可以同时进行,互不冲突。 13. **白璧微瑕**:完美的事物...
4. **黯然失色**:形容相比之下显得差远了,不如别人。同义词有“相形见绌”、“大相径庭”。反义成语如“光彩夺目”、“不相上下”。 5. **慷慨激昂**:形容精神振奋,情绪高昂,充满正气。同义词有“热血沸腾”、...
《爱的教育》的影响力之广泛,从它的翻译版本就能略见一斑。作为一部文学作品,它跨越国界和文化,成为全人类的精神财富。通过阅读《争吵》,学生不仅能够提升自己的语言表达能力,更能在情感和道德上得到深刻的教育...
"略见一斑"意味着事情的端倪已经显现,“光明灿烂”和“辉煌”均形容美好前景,但前者更侧重于未来的可能性,后者侧重于实际的辉煌成就。因此,选B:希望光明,光明璀璨。 8. 经济形势描述:第八题中,“内热外冷”...
- 《红楼梦》是中国古代四大名著之一,属于章回体小说,现有120回,前80回由曹雪芹创作,后40回一般认为是高鹗续写。曹雪芹,原名霑,字梦阮。《红楼梦》以贾、史、王、薛四大家族的兴衰为背景,以贾宝玉和林黛玉的...
例如,我们读软盘上的文件,以及解压一个 ZIP 文件时,偶尔会碰到“Bad CRC”错误,由此它在数据存储方面的应用可略见一斑。 CRC 的优点 CRC 的优点在于编码和解码方法简单,检错和纠错能力强,在通信领域广泛地...
9. **略见一斑**:只看到事物的一部分,无法全面了解。斑:斑纹,比喻事物的局部特征。 10. **味同嚼蜡**:形容事物乏味,如同吃蜡一样,多用于形容文章或讲话枯燥无味。 11. **绵里藏针**:表面柔和,内心狠毒,...