设计模式-状态模式

概述

状态模式也是一种行为型的设计模式,其最主要的思想是将状态封装到对象中,然后对象的行为依赖于状态,使用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 小时前
Java面试——设计模式(二)
java·设计模式·面试
FungLeo1 小时前
React 管理后台实战 · 列表里突然出现一堆空白行?PIPL 擦除后前端怎么处理才不露馅
前端·react.js·状态模式·pipl
兰亭妙微UI设计公司2 小时前
兰亭妙微B端界面设计分享:Vantary海事无人系统任务平台UI/UX设计解析
ui·ux
国科安芯3 小时前
ASL3159S:把精密信号的“破音“挡在切换之外的 0.9Ω 开关
服务器·网络·数据库·架构·状态模式·抗辐射加固
伊玛目的门徒3 小时前
deepseek harness DSH 安装皮肤脚手架(dsh‑client‑ui‑skin‑center)踩坑完整记录
ui·插件·皮肤·harness·dsh
Larcher17 小时前
SDD 项目开发步骤与提示词
人工智能·设计模式·架构
阿无,21 小时前
设计模式之责任链模式
设计模式·责任链模式
zhchyun20081 天前
【Unity UI 进阶】仿 Element UI 打造企业级 Unity UI 组件库(05)
ui·unity·游戏引擎
不灭的程序员阿澄1 天前
Nginx 容器化部署实战:SPA 路由、Cookie 透传与 WebSocket 全配置详解
websocket·nginx·状态模式
tanghonghanhaoli1 天前
【图书翻译】有意义的游戏设计:桌面游戏的方法论与心理学(第1、2章)
前端·游戏·ui