设计模式-状态模式

概述

状态模式也是一种行为型的设计模式,其最主要的思想是将状态封装到对象中,然后对象的行为依赖于状态,使用Switch语句是有不同的,较少了很多分支语句的使用,可以参考下面的例子,如果使用分支语句会有比较多的判断,但是使用状态模式,就减少了对应的判断,也使得代码在使用的时候会减少出错,因为使用的时候只有切换,不用传具体的状态,不过这个模式的缺点也一眼就可以看出,代码控制性不如分支语句。其主要组成部分是状态接口,具体的状态,状态控制器,用状态控制器控制状态的切换。举例如下


例子:现在有个游戏BOOS的状态有,普通,生气,狂暴三个状态,使用一个状态控制器调用一个方法控BOSS的状态切换。

状态模式

cs 复制代码
using System.Numerics;

internal class Program
{
    private static void Main(string[] args)
    {
        StateControl SC = new StateControl(new CommonState());

        SC.Switch();  //切换到普通状态
        SC.Switch();  //切换到生气状态
        SC.Switch();  //切换到狂暴状态
    }
    public interface IState//状态接口
    {
        void SwitchingStatus(StateControl sc);
    }
    public class CommonState : IState//普通状态
    {
        public void SwitchingStatus(StateControl sc)
        {
            Console.WriteLine("BOOS进入普通状态!");
            sc.SetState(new AngryState());
        }
    }
    public class AngryState : IState//生气状态
    {
        public void SwitchingStatus(StateControl sc)
        {
            Console.WriteLine("BOOS进入生气状态!");
            sc.SetState(new MusthState());
        }
    }
    public class MusthState : IState//狂暴状态
    {
        public void SwitchingStatus(StateControl sc)
        {
            Console.WriteLine("BOOS进入狂暴状态!");
        }
    }
    public class StateControl//状态控制器
    {
        private IState _state;
        public StateControl(IState state)
        {
            _state = state;
        }
        public void SetState(IState state)
        {
            _state = state;
        }
        public void Switch()
        {
            _state.SwitchingStatus(this);
        }
    }
}

运行结果:

BOOS进入普通状态!

BOOS进入生气状态!

BOOS进入狂暴状态!

相关推荐
多加点辣也没关系1 小时前
设计模式-观察者模式
观察者模式·设计模式
hssfscv1 小时前
软件设计师下午题训练1-3题+2019上上午题错题解析 练习真题训练13
笔记·设计模式·uml
拾-光3 小时前
【Git】命令大全:从入门到高手,100 个最常用命令速查(2026 版)
java·大数据·人工智能·git·python·elasticsearch·设计模式
多加点辣也没关系5 小时前
设计模式-模板方法模式
设计模式·模板方法模式
guslegend6 小时前
第9节:前端工程与一键启动
前端·大模型·状态模式·ai编程
ZC跨境爬虫9 小时前
跟着 MDN 学 HTML day_52:(深入 XPathExpression 接口)
开发语言·前端·javascript·ui·html·音视频
Autumn_ing9 小时前
2026实测:这5款AI生成UI工具支持Shadcn UI/Ant Design组件库
人工智能·ui·设计模式·aigc·设计规范
UXbot9 小时前
AI 原型工具零设计基础操作指南与功能解析(2026)
前端·ui·产品经理·原型模式·web app
yuzhiboyouye10 小时前
VO一般java后端怎么转换成前端想要的数据
java·前端·状态模式
ZC跨境爬虫13 小时前
跟着 MDN 学 HTML day_50:(深入理解 DOM 中的 Text 节点)
前端·javascript·microsoft·ui·html·媒体