核心:
用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。
结构:
Context环境类:
环境类中维护一个State对象,定义了当前的状态。
State抽象状态类:
ConcreteState具体状态类:
每一个类封装了一个状态对应的行为。
UML结构图
示例代码:房间的状态
房间的状态:空闲、预定、入住
State.java 状态对应的行为
/**
* 状态
*
* @author Administrator
*
*/
public interface State {
/**
* 行为
*/
void handle();
}
FreeState.java 空闲状态
/**
* 空闲状态
*
* @author Administrator
*
*/
public class FreeState implements State{
/**
* 行为
*/
public void handle() {
System.out.println("房间空闲");
}
}
BookedState.java 预定状态
/**
* 已预定
*
* @author Administrator
*
*/
public class BookedState implements State {
/**
* 行为
*/
public void handle() {
System.out.println("房间已预定");
}
}
CheckedInState.java 入住状态
/**
* 已入住
*
* @author Administrator
*
*/
public class CheckedInState implements State {
/**
* 行为
*/
public void handle() {
System.out.println("房间已入住");
}
}
HomeContext.java 上下文
/**
*
* @author Administrator
*
*/
public class HomeContext {
/** 当前的状态 */
private State state;
public void setState(State state) {
this.state = state;
this.state.handle();
System.out.println("修改状态");
}
}