计划模式-状态模式

[复制链接]
发表于 2024-8-22 18:25:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
概述

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

例子:现在有个游戏BOOS的状态有,普通,气愤,狞恶三个状态,使用一个状态控制器调用一个方法控BOSS的状态切换。
状态模式

  1. using System.Numerics;
  2. internal class Program
  3. {
  4.     private static void Main(string[] args)
  5.     {
  6.         StateControl SC = new StateControl(new CommonState());
  7.         SC.Switch();  //切换到普通状态
  8.         SC.Switch();  //切换到生气状态
  9.         SC.Switch();  //切换到狂暴状态
  10.     }
  11.     public interface IState//状态接口
  12.     {
  13.         void SwitchingStatus(StateControl sc);
  14.     }
  15.     public class CommonState : IState//普通状态
  16.     {
  17.         public void SwitchingStatus(StateControl sc)
  18.         {
  19.             Console.WriteLine("BOOS进入普通状态!");
  20.             sc.SetState(new AngryState());
  21.         }
  22.     }
  23.     public class AngryState : IState//生气状态
  24.     {
  25.         public void SwitchingStatus(StateControl sc)
  26.         {
  27.             Console.WriteLine("BOOS进入生气状态!");
  28.             sc.SetState(new MusthState());
  29.         }
  30.     }
  31.     public class MusthState : IState//狂暴状态
  32.     {
  33.         public void SwitchingStatus(StateControl sc)
  34.         {
  35.             Console.WriteLine("BOOS进入狂暴状态!");
  36.         }
  37.     }
  38.     public class StateControl//状态控制器
  39.     {
  40.         private IState _state;
  41.         public StateControl(IState state)
  42.         {
  43.             _state = state;
  44.         }
  45.         public void SetState(IState state)
  46.         {
  47.             _state = state;
  48.         }
  49.         public void Switch()
  50.         {
  51.             _state.SwitchingStatus(this);
  52.         }
  53.     }
  54. }
复制代码
运行结果:
BOOS进入普通状态!
BOOS进入气愤状态!
BOOS进入狞恶状态!
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表