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

      

  • 相关阅读:
    ASP.NET面试题(二)
    iBatis.Net系列(四) iBatisNet API基础
    ibatisnet系列(一) 总览
    iBatisnet系列(二) 配置运行环境和日志处理
    HDU 1575 Tr A (矩阵乘法)
    HDU 连连看
    1504: ZZ的橱柜 (优先队列)
    离散化思想
    POJ 2777 Count Color (线段树)
    POJ 1823 Hotel (线段树)
  • 原文地址:https://www.cnblogs.com/since87/p/5331239.html
Copyright © 2011-2022 走看看