首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
数据库
›
Oracle
›
计划模式-状态模式
返回列表
发新帖
计划模式-状态模式
[复制链接]
发表于 2024-8-22 18:25:17
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
概述
状态模式
也是一种
行为型的计划模式
,其最重要的思想是将状态封装到对象中,然后对象的行为依赖于状态,使用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进入狞恶状态!
回复
使用道具
举报
返回列表
浏览过的版块
Java
人工智能
DevOps与敏捷开发
物联网
网络安全
备份
linux
SAAS
分布式数据库
IOS
民工心事
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表