一、模式动机
- 原文地址:点我去原文
在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful
)对象,这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。
二、模式定义
状态模式(
State Pattern
):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States
),状态模式是一种对象行为型模式。
三、模式结构
1. 角色组成:
状态模式包含如下角色:
Context
: 环境类State
: 抽象状态角色ConcreteState
: 具体状态角色类
2. 结构图:
3. 时序图:
四、示例代码
首先,是抽象的状态角色接口:
/**
* 抽象状态角色
* Created by blinkfox on 16/7/12.
*/
public interface IState {
/**
* 抽象方法1
*/
void handle1();
/**
* 抽象方法2
*/
void handle2();
}
接下来,是多个具体的状态角色类,分别如下:
/**
* 具体状态角色类1
* Created by blinkfox on 16/7/12.
*/
public class ConcreteState1 implements IState {
/**
* 具体状态角色类1中的方法1