状态模式(State)就是根据对象的状态不同,将有不同的行为。当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式使代码种复杂而庸长的逻辑判断语句问题得到了解决,而且具体状态角色将具体的状态和它对应的行为封装起来了,这使得增加一种新的状态变得十分简单。但是每一个状态对应一个具体的状态类,是结构分散,逻辑不是很清楚,阅读代码工作量会大一些。
// Context类,维护一个ConcreteState子类的实例,这个实例定义当前的状态。 public class Context { private State state; // 定义Context的初始状态 public Context(State state) { this.state = state; } // 对请求做处理,并设置下一个状态 public void Request() { state.Handle(this); } // 可读写的状态属性,用于读取和设置新状态 public void setState(State state){ this.state= state; } public State getState(){ return state; } } // 抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为 public abstract class State { public abstract void Handle(Context context); } // 具体状态类,每一个子类实现一个与Context的一个状态相关的行为 public class ConcreteStateA implements State { // 设置ConcreteStateA的下一个状态是ConcreteStateB public void Handle(Context context) { System.out.println("当前状态是 A."); context.setState(new ConcreteStateB()); } } public class ConcreteStateB implements State { // 设置ConcreteStateB的下一个状态是ConcreteSate public void Handle(Context context) { System.out.println("当前状态是 B."); context.setState(new ConcreteStateA()); } }
class Program { static void Main(string[] args) { // 设置Context的初始状态为ConcreteStateA Context context = new Context(new ConcreteStateA()); // 不断地进行请求,同时更改状态 context.Request(); context.Request(); context.Request(); context.Request(); } }
相关推荐
设计模式C++学习之状态模式(State)
状态模式(State) 用意:允许一个对象当状态改变时,改变其行为。
C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式
State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elseif else 进行状态切换, 如果针对状态的这样判断切换反复出现,我们就要联想到是否可以采取State模式了. 不只是根据状态,也有根据属性.如果...
http://blog.csdn.net/feiyinzilgd/archive/2011/04/05/6302717.aspx (C++ State 设计模式博客)演示源代码。用C++实现并较详细的讲述了Sate模式的意图和工作状态。
NULL 博文链接:https://wy649898543.iteye.com/blog/1434590
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。
在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。
Head First 设计模式 (十) 状态模式(State pattern) C++实现
C++设计模式课件18_State_状态模式.pdf
C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式 C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式 C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式 C#面向对象设计...
主要介绍了Java设计模式之状态模式(State模式)介绍,本文讲解了何时使用状态模式、如何使用状态模式等内容,需要的朋友可以参考下
该PDF是我在学习state pattern时所做的笔记。里面包括了state pattern 的定义、何时使用、是否使用及实例四个部分,实例部分写的比较细,看完这个实例,相信大家也就知道怎么在自己的项目中应用state pattern了。这...
第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式(Decorator) 第23章 职责链模式(Chain of Responsibility) 第24...
State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的问题,大部分人是采用switch-case语句进行处理的,这样会造成一个问题:分支过多,而且如果加入一个新的状态就需要对...
状态模式
NULL 博文链接:https://zhangyan19870108.iteye.com/blog/1992409
本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用...
c++设计模式-行为型模式-状态模式;qt工程;c++简单源码; 状态(State)模式的定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。