博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
StatePattern
阅读量:4709 次
发布时间:2019-06-10

本文共 3717 字,大约阅读时间需要 12 分钟。

class Program    {        static void Main(string[] args)        {            var state = new OpeningState();            var lift = new Lift();            lift.SetListState(state);            lift.Close();            lift.Open();            lift.Run();            lift.Stop();            Console.Read();        }    }    public abstract class LiftState    {        protected Lift Lift;        public void SetLift(Lift lift)        {            this.Lift = lift;        }        public abstract void Open();        public abstract void Close();        public abstract void Run();        public abstract void Stop();    }    public class OpeningState : LiftState    {        public override void Open()        {            Console.WriteLine("电梯打开!");        }        public override void Close()        {            base.Lift.SetListState(Lift.CloseingState);            base.Lift.Close();        }        public override void Run()        {            Console.WriteLine("打开不能运行");        }        public override void Stop()        {            base.Lift.SetListState(Lift.StopingState);            base.Lift.Stop();        }    }    public class ClosingState : LiftState    {        public override void Open()        {            base.Lift.SetListState(Lift.OpeningState);            base.Lift.Open();        }        public override void Close()        {            Console.WriteLine("电梯关闭!");        }        public override void Run()        {            base.Lift.SetListState(Lift.RuningState);            base.Lift.Open();        }        public override void Stop()        {            base.Lift.SetListState(Lift.StopingState);            base.Lift.Stop();        }    }    public class RuningState : LiftState    {        public override void Open()        {            base.Lift.SetListState(Lift.OpeningState);            base.Lift.Open();        }        public override void Close()        {            base.Lift.SetListState(Lift.CloseingState);            base.Lift.Close();        }        public override void Run()        {            Console.WriteLine("电梯运行!");        }        public override void Stop()        {            base.Lift.SetListState(Lift.StopingState);            base.Lift.Stop();        }    }    public class StopingState : LiftState    {        public override void Open()        {            base.Lift.SetListState(Lift.OpeningState);            base.Lift.Open();        }        public override void Close()        {            base.Lift.SetListState(Lift.CloseingState);            base.Lift.Close();        }        public override void Run()        {            base.Lift.SetListState(Lift.RuningState);            base.Lift.Open();        }        public override void Stop()        {            Console.WriteLine("电梯停止!");        }    }    public class Lift    {        public static LiftState OpeningState = new OpeningState();        public static LiftState CloseingState = new ClosingState();        public static LiftState RuningState = new RuningState();        public static LiftState StopingState = new StopingState();        private LiftState _liftState;        public LiftState GetState()        {            return this._liftState;        }        public void SetListState(LiftState state)        {            this._liftState = state;            this._liftState.SetLift(this);        }        public void Open()        {            this._liftState.Open();        }        public void Close()        {            this._liftState.Close();        }        public void Stop()        {            this._liftState.Stop();        }        public void Run()        {            this._liftState.Run();        }    }

  

转载于:https://www.cnblogs.com/since87/p/5331239.html

你可能感兴趣的文章
游戏开发中常用的设计模式
查看>>
Linux 中/etc/profile、~/.bash_profile 环境变量配置及执行过程
查看>>
JAVA:图形之利用FontMetrics类居中
查看>>
使用rsync同步目录
查看>>
[读码时间] for循环遍历设置所有DIV块元素背景色为红色
查看>>
网页调用迅雷下载文件
查看>>
Python 调用 Shell命令
查看>>
POJ 1159 Palindrome(最长公共子序列)
查看>>
ubuntu下安装fcitx五笔输入法
查看>>
责任链模式(chain of responsibility)
查看>>
[转载]java多线程学习-java.util.concurrent详解(一) Latch/Barrier
查看>>
ionic - 运行起来
查看>>
Shell 输入/输出重定向
查看>>
数据结构与算法分析(C++)读书笔记
查看>>
(转)nginx应用总结(1)--基础认识和应用参数优化配置
查看>>
(转)关于sql和MySQL的语句执行顺序(必看!!!)
查看>>
UVALive 3668 A Funny Stone Game(博弈)
查看>>
信息论随笔2: 交叉熵、相对熵
查看>>
再学习之MyBatis.
查看>>
CodeWars题目筛选
查看>>