zoukankan      html  css  js  c++  java
  • StatePattern

    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();
            }
        }
    

      

  • 相关阅读:
    调整浏览器兼容性的利器条件判断注释器
    Automatic uninstall IE9 and roll back to IE8
    How to use cmd with C#
    [转]在设计和执行测试用例的时候的几点心得和经验
    Move all files in subfolders to another folder using c#
    数据驱动单元测试实例
    测试web开源项目时如何收集代码覆盖率
    2013春节期间玩CentOS 6.3记录
    当使用ckeditor控件时,需要校验输入内容是否为空的一种解决办法(转帖)
    Enterprise Architect 8.0 注册码
  • 原文地址:https://www.cnblogs.com/since87/p/5331239.html
Copyright © 2011-2022 走看看