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

      

  • 相关阅读:
    [转载]Dorado学习笔记
    [转载]dorado学习笔记(二)
    [转载]Struts+Spring+HibernateSSH整合实例
    [转载]Dorado中DataTable使用技巧汇总
    [转载]Struts+Spring+HibernateSSH整合实例
    JAVA基础知识复习面试笔试宝典
    [转载]Dorado中DataTable使用技巧汇总
    [转载]Dorado学习笔记
    IE网页中PNG格式图片无法显示的解决方法
    网络字节序和主机字节序
  • 原文地址:https://www.cnblogs.com/since87/p/5331239.html
Copyright © 2011-2022 走看看