意图
允许一个对象在其内部状态改变时改变它的行为.
适用性
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为.
一个对象有不同的行为,这个行为是由它的状态来决定的,一个对象的状态是由它的
成员变量来决定的.
比如一个Person类,它有两个成员变量,一个姓名name,一个年龄age,当Person这个类
生成相应的对象之后,这个对象一旦名字或者年龄发生变化,我们说这个对象它的状态发
生了变化.如果它的成员变量都没有发生变化,那么这个对象就没有发生变化.
2.一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态.这个
状态通常用一个或多个枚举常量来表示.通常,有多个操作包含这一相同的结构.
State模式将每一个条件分支放入一个独立的类中.这使得你可以更具对象自身的情况
将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化.
也就是说在if-else这种情况下里面,每个if-else里面执行的代码都把它封装在相应的对象,
其中对象和对象之间是不会产生干扰的,它们变化是不影响其他对象的.
构成:
1.抽象状态(State)角色:定义一个接口,用以封装环境(Context)对象的一个特定的
状态所对应的行为.
2.具体状态(ConcreteState)角色:每一个具体状态类都实现了环境(Context)的一个状态
所对应的行为.
3.环境(Context)角色:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例.这个
具体状态类的实例给出此环境对象的现有状态.
换句话说,客户端是和环境角色打交道,环境角色向客户端提供了一种行为,是由具体的状态
角色来给我们提供的,相应的环境角色里会持有对状态角色的一个引用.
环境角色里会持有相应具体状态角色的一个引用,当具体状态发生变化的时候,环境角色对外提供
的接口也发生了变化,因为底层维护着具体状态行为发生的变化,而每一个具体状态所对应的
行为又是不一样的,所以导致环境角色对外提供的接口发生了变化.
ClassDiagram:
SequenceDiagram:
class Clinet
{
static void Main(string[] args)
{
Car c = new Car();
c.Pull();
c.Pull();
c.Pull();
c.Pull();
Console.ReadKey();
}
}
/// <summary>
/// 环境角色
/// </summary>
abstract class State
{
public abstract void pull(Car car);
}
/// <summary>
/// 环境角色
/// </summary>
class Car
{
private State current;
public Car()
{
current = new Off();
Console.WriteLine("新车生产出来了现在是空档!");
}
public void SetState(State state)
{
current = state;
}
public void Pull()
{
current.pull(this);
}
}
class Off : State
{
public override void pull(Car car)
{
car.SetState(new Low());
Console.WriteLine("低档");
}
}
class Low : State
{
public override void pull(Car car)
{
car.SetState(new Midium());
Console.WriteLine("中档");
}
}
class Midium : State
{
public override void pull(Car car)
{
car.SetState(new High());
Console.WriteLine("高档");
}
}
class High : State
{
public override void pull(Car car)
{
car.SetState(new Off());
Console.WriteLine("空档");
}
}
- 大小: 52.6 KB
- 大小: 84 KB
分享到:
相关推荐
### 状态模式(State Pattern) #### 概念与定义 状态模式是一种行为设计模式,它允许对象在其内部状态改变时改变其行为,使对象看起来像是修改了它的类。该模式通过引入一个代表各种状态的类以及一个行为随着这些...
在软件设计领域,状态模式(State Pattern)是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。在这个案例中,“基于state pattern实现的xml解释器”指的是一个XML解析器,该...
2. **State(抽象状态)**:这是所有具体状态类的抽象,通常是一个接口或抽象类,定义了所有可能的状态以及与每个状态相关的操作。 3. **ConcreteState(具体状态)**:实现了抽象状态定义的操作,每个具体状态类...
状态模式-State Pattern状态模式-State Pattern【学习难度:,使用频率:】状态模式-State Pattern处理对象的多种状态及其相互
状态模式(State Pattern)是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式将一个对象的行为分解为各个独立的状态,并且每个状态都封装在自己的类中,使得对象在...
StatePattern.unitypackage是一个unity演示的状态模式。有需要的同学可以自行下载。
在《设计模式》实战---状态模式(State Pattern)这篇文章中,作者可能详细探讨了以下关键点: 1. **模式定义**:状态模式允许对象在内部状态改变时改变其行为,对象看起来好像修改了它的类。这通过将每个状态封装...
Context(State* initialState) : currentState(initialState) {} void setState(State* newState) { currentState = newState; } void doSomething() { currentState->handle(); } }; ``` 4. **使用状态...
状态模式定义Allow an object to alter its behavior when its internal state changes. The
在软件设计领域,设计模式是解决常见问题的可重用解决方案。它们是经过验证的、在特定上下文中高效的设计决策,被广泛应用于构建可维护和可扩展的软件系统。本篇将深入探讨“开闭原则”(Open Close Principle,OCP...
状态模式(State Pattern)是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。在JavaScript中,状态模式同样适用,并且由于JavaScript的灵活性,实现起来相对简单。 状态...
1. **状态模式(State Pattern)**: 状态模式允许对象在其内部状态改变时改变其行为。它将一个类的行为包装在独立的对象中,这些对象称为状态对象。每个状态对象代表一种特定的状态,并且负责处理与该状态相关的...
状态模式(State Pattern)是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象在不同状态下的不同行为,使得对象的状态转换更加清晰,同时也解耦了...
备忘录模式(Memento Pattern) 策略模式(Strategy Pattern) 抽象工厂模式(Abstract Factory Pattern) 代理模式(Proxy Pattern) ...装饰模式(Decorator Pattern) 状态模式(State Pattern) 组合模式(Composite Pattern)
首先,我们将创建 State 接口,该接口将定义应由不同的具体状态和上下文类实现的方法。 在我们的示例中,我们可以有两种状态 --> 一种用于打开电视,另一种用于关闭电视。 因此,我们将为这些行为创建两个具体的...
3. **状态模式(State Pattern)**:通过引入`KissingPrincess.java`作为动机示例,本书阐述了状态模式如何帮助对象在其内部状态变化时改变其行为。 4. **享元模式(Flyweight Pattern)**:本书添加了一个简单的享...
以提供的`StatePattern.cpp`和`StatePattern.h`为例,我们可能会看到以下的实现方式: 在`StatePattern.h`中,`State`是抽象状态接口,它声明了各种与状态相关的操作。例如: ```cpp class State { public: ...
创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype)结构型: 6.... 状态模式(State Pattern)
状态机的实现方式有多种,包括switch/case、状态表维护、使用 State Pattern 和使用宏定义描述状态机等。 首先,switch/case 是最直观的方式,使用一堆条件判断,适合小巧的状态机。但是,这样的方式比较原始,对...