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

      

  • 相关阅读:
    关于地址添加 子窗体向父窗体传值 树的使用详细
    C# 常见面试题2
    微软2014实习生及秋令营技术类职位在线测试
    【面试题004】c/c++字符串,替换空格
    【面试题003】c数组做为参数退化的问题,二维数组中的查找
    【面试题001】类型转换关键字,空类对象模型,拷贝构造函数,赋值运算符函数
    【面试题002】java实现的单例模式,c++实现单例模式,实现禁止拷贝
    【设计模式6原则总结】
    【设计模式六大原则6】开闭原则(Open Close Principle)
    【设计模式六大原则5】迪米特法则(Law Of Demeter)
  • 原文地址:https://www.cnblogs.com/since87/p/5331239.html
Copyright © 2011-2022 走看看