Skip to content

状态模式

意图

允许对象在内部状态改变时改变行为,对象看起来修改了类。把与状态相关的分支拆成独立状态类。

类图

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());
    }
}

策略模式类图相似:策略由客户端选状态;状态由上下文迁移自动切换。

下一节:策略模式