当前位置: 首页 > news >正文

设计模式-状态模式

概述

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


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

状态模式

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进入狂暴状态!


http://www.mrgr.cn/news/7249.html

相关文章:

  • SFF806A-ASEMI无人机专用SFF806A
  • 14:00面试,14:06就出来了,问的问题有点变态。。。
  • getchar(),putchar(),EOF的详细解释
  • Gameplay Ability System(事件通知)
  • ArkTS---HAR
  • DAY52
  • 货车制造5G智能工厂工业物联数字孪生平台,推进制造业数字化转型
  • 设计模式-1 概念 创建型模式
  • 求数组中出现次数超过一半的数字
  • Nacos微服务注册管理中心与服务通信
  • 驱动 day1 --内核的编译
  • 玩客云刷机armbian后docker启动不起来,提示bpf_prog_query(BPF_CGROUP_DEVICE) failed
  • 深入理解HTML中的script defer属性
  • oracle 如果是多条插入语句用begin end 快还是一条一条插入快?
  • 大数据开发工程师面试整理-如何处理紧急的生产环境问题?
  • 卓越测试工程师必备:团队协作的艺术
  • “双指针”算法下篇
  • STM32 HAL SDADC DMA
  • Deepin【2】:Deepin系统盘扩容
  • 代码随想录算法训练营第57天|prim算法精讲、kruskal算法精讲