设计模式-》状态机模式

例子

  • 我们经常坐电梯都知道,电梯有多种状态,就按最简单的来说,包括运行状态、停止状态、开门状态、闭门状态。下面就以电梯运行为例,举一个具体的实例,UML图如下:
public abstract class LiftState { protected LiftContext LiftContext; public void SetContext(LiftContext liftContext) { this.LiftContext = liftContext; } //电梯门开启动作 public abstract void Open(); //电梯门关闭动作 public abstract void Close(); //电梯运行 public abstract void Run(); //电梯停止 public abstract void Stop(); } public class OpenState : LiftState { public override void Open() { Console.WriteLine("电梯门开启"); } public override void Close() { LiftContext.SetLiftState(LiftContext.CLOSING_STATE); LiftContext.Close(); } public override void Run() { } public override void Stop() { } } public class RunState : LiftState { public override void Open() { } public override void Close() { } public override void Run() { Console.WriteLine("电梯开始运行"); } public override void Stop() { LiftContext.SetLiftState(LiftContext.STOPPING_STATE); LiftContext.Stop(); } } public class StopState : LiftState { public override void Open() { LiftContext.SetLiftState(LiftContext.OPENNING_STATE); LiftContext.Open(); } public override void Close() { } public override void Run() { LiftContext.SetLiftState(LiftContext.RUNNING_STATE); LiftContext.Run(); } public override void Stop() { Console.WriteLine("电梯停止了"); } } public class CloseState : LiftState { public override void Open() { LiftContext.SetLiftState(LiftContext.OPENNING_STATE); LiftContext.Open(); } public override void Close() { Console.WriteLine("电梯门关闭"); } public override void Run() { LiftContext.SetLiftState(LiftContext.RUNNING_STATE); LiftContext.Run(); } public override void Stop() { LiftContext.SetLiftState(LiftContext.STOPPING_STATE); LiftContext.Stop(); } } public class LiftContext { public LiftContext() { SetLiftState(CLOSING_STATE); } //定义出电梯的所有状态 public readonly static LiftState OPENNING_STATE = new OpenState(); public readonly static LiftState CLOSING_STATE = new CloseState(); public readonly static LiftState RUNNING_STATE = new RunState(); public readonly static LiftState STOPPING_STATE = new StopState(); //定义一个当前电梯状态 private LiftState LiftState; public LiftState GetLiftState() { return LiftState; } public void SetLiftState(LiftState liftState) { this.LiftState = liftState; //通知到各个实现类中 this.LiftState.SetContext(this); } public void Open() { this.LiftState.Open(); } public void Close() { this.LiftState.Close(); } public void Run() { this.LiftState.Run(); } public void Stop() { this.LiftState.Stop(); } } private static void LiftTest() { LiftContext liftContext = new LiftContext(); liftContext.Open(); liftContext.Close(); liftContext.Run(); liftContext.Stop(); }

UML
参考地址


__EOF__

本文作者icxldd
本文链接https://www.cnblogs.com/icxldd/p/15804920.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   icxl  阅读(328)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示