Appearance
状态模式
意图
允许对象在内部状态改变时改变行为,对象看起来修改了类。把与状态相关的分支拆成独立状态类。
类图
Java 示例
java
public interface TcpState {
void open(TcpConnection ctx);
void close(TcpConnection ctx);
}
public class TcpConnection {
private TcpState state = new ClosedState();
void setState(TcpState s) { this.state = s; }
public void open() { state.open(this); }
public void close() { state.close(this); }
}
class ClosedState implements TcpState {
public void open(TcpConnection ctx) {
System.out.println("open connection");
ctx.setState(new OpenState());
}
public void close(TcpConnection ctx) { /* no-op */ }
}
class OpenState implements TcpState {
public void open(TcpConnection ctx) { /* already open */ }
public void close(TcpConnection ctx) {
System.out.println("close");
ctx.setState(new ClosedState());
}
}与策略模式类图相似:策略由客户端选状态;状态由上下文迁移自动切换。
下一节:策略模式