设计模式-状态模式

状态模式是一种行为设计模式,允许对象在内部状态改变时改变它的行为,对象看起来似乎修改了它的类。

以下是一个简单的状态模式的C#实现示例,其中包含一个简单的状态类以及一个上下文类,该上下文类会根据状态改变其行为:

cs 复制代码
using System;
 
// 状态接口
interface IState
{
    void Handle(Context context);
}
 
// 实现状态接口的具体状态类
class ConcreteStateA : IState
{
    public void Handle(Context context)
    {
        context.State = this;
        Console.WriteLine("当前状态是 A.");
    }
}
 
class ConcreteStateB : IState
{
    public void Handle(Context context)
    {
        context.State = this;
        Console.WriteLine("当前状态是 B.");
    }
}
 
// 维护状态的上下文类
class Context
{
    private IState _state;
 
    public Context(IState state)
    {
        this._state = state;
    }
 
    public IState State
    {
        get { return _state; }
        set { _state = value; }
    }
 
    public void Request()
    {
        _state.Handle(this);
    }
}
 
class Program
{
    static void Main(string[] args)
    {
        Context context = new Context(new ConcreteStateA());
        
        // 行为会根据当前状态改变
        context.Request();
        context.Request();
 
        Console.ReadKey();
    }
}

在这个例子中,Context类维护了一个IState类型的私有变量,代表当前的状态。Request方法会委托给当前状态的Handle方法来执行。通过改变Context的状态,你可以改变Context类的行为,而不需要修改Context类的代码。这就是状态模式的基本概念。

相关推荐
楼田莉子29 分钟前
同步/异步日志系统:日志落地模块\日志器模块\异步日志模块
linux·服务器·c++·学习·设计模式
JAVA学习通1 小时前
励志从零打造LeetCode平台之C端竞赛列表
java·vscode·leetcode·docker·状态模式
Chengbei117 小时前
某211高校从一个文档到十八万条sfz泄露和命令执行
人工智能·安全·web安全·网络安全·系统安全·状态模式·安全架构
kyriewen118 小时前
代码写成一锅粥?这5种设计模式让你的项目“起死回生”
前端·javascript·设计模式·typescript·ecmascript·html5
kyriewen8 小时前
代码写成一锅粥?这5种设计模式让你的项目“起死回生”
前端·javascript·设计模式
两年半的个人练习生^_^8 小时前
每日一学:设计模式之原型模式
java·开发语言·设计模式·原型模式
前端不太难9 小时前
养门槛高、成本难控:OpenClaw的“好用”与“难用”
状态模式·openclaw
断眉的派大星1 天前
工厂模式(Factory Pattern)完整详解
python·设计模式
AI大法师1 天前
复盘 TikTok 品牌升级:动态品牌系统应该怎么理解和落地
大数据·人工智能·设计模式
前端不太难1 天前
当 AI 出错时,责任在谁?系统设计中的责任归属(Accountability)
人工智能·状态模式