TypeScript实现状态模式

在 TypeScript 中实现状态模式相对直接,可以利用类和接口来封装状态行为。简单实现以下

示例:文档状态管理

假设我们有一个文档系统,文档可以在“草稿(Draft)”、“审查(Review)”和“发布(Published)”三种状态之间转换。我们将使用状态模式来实现这个系统。

1. 定义状态接口

首先,我们定义一个 State 接口,定义了不同状态所需的方法。

interface State {
    handleRequest(context: DocumentContext): void;
}
2. 实现具体状态类

然后,我们实现具体的状态类,分别对应于“草稿”、“审查”和“发布”状态。

class DraftState implements State {
    handleRequest(context: DocumentContext): void {
        console.log("Document is in draft state.");
        context.setState(new ReviewState()); // 转换状态为审查状态
    }
}

class ReviewState implements State {
    handleRequest(context: DocumentContext): void {
        console.log("Document is under review.");
        context.setState(new PublishedState()); // 转换状态为发布状态
    }
}

class PublishedState implements State {
    handleRequest(context: DocumentContext): void {
        console.log("Document is published.");
        // 这里可以选择不转换状态
    }
}
3. 创建上下文类

接下来,我们创建一个上下文类 DocumentContext,它持有当前状态的引用并提供状态切换的方法。

class DocumentContext {
    private state: State;

    constructor(initialState: State) {
        this.state = initialState;
    }

    setState(state: State): void {
        this.state = state;
    }

    request(): void {
        this.state.handleRequest(this);
    }
}
4. 使用状态模式

最后,我们可以创建上下文实例,并通过不同的方法调用来处理状态转换。

// 使用示例
const document = new DocumentContext(new DraftState());

// 处理请求,转换状态
document.request(); // 输出: Document is in draft state.
document.request(); // 输出: Document is under review.
document.request(); // 输出: Document is published.

总结

在这个示例中,我们展示了如何在 TypeScript 中实现状态模式。我们定义了状态接口和多个具体状态类,以及一个上下文类来管理状态的转换。通过这种方法,系统在不同状态下的行为是清晰的,易于扩展和维护。

如果需要添加新的状态,只需创建新的状态类并实现 State 接口,然后在 DocumentContext 类中进行相应的状态转换即可。这使得整个系统灵活且具有良好的可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值