zoukankan      html  css  js  c++  java
  • 设计模式

    abstract class State
    {
        public abstract void WriteProgram(Work w);
    }
    
    class ForenoonState : State
    {
        public override void WriteProgram(Work w)
        {
            if (w.Hour < 12)
            {
                Console.WriteLine(string.Format("当前时间 {0} 点,working", w.Hour));
            }
            else
            {
                w.SetState(new NoonState());
                w.WriteProgram();
            }
        }
    }
    
    class NoonState : State
    {
        public override void WriteProgram(Work w)
        {
            if (w.Hour < 13)
            {
                Console.WriteLine(string.Format("当前时间 {0} 点,sleep", w.Hour));
            }
            else
            {
                w.SetState(new AfterNoonState());
                w.WriteProgram();
            }
        }
    }
    
    class AfterNoonState : State
    {
        public override void WriteProgram(Work w)
        {
            if (w.Hour < 17)
            {
                Console.WriteLine(string.Format("当前时间 {0} 点,working", w.Hour));
            }
            else
            {
                w.SetState(new EveningState());
                w.WriteProgram();
            }
        }
    }
    
    class EveningState : State
    {
        public override void WriteProgram(Work w)
        {
            if (w.TaskFinished)
            {
                w.SetState(new RestState());
                w.WriteProgram();
            }
            else
            {
                if (w.Hour < 21)
                {
                    Console.WriteLine(string.Format("working at {0}", w.Hour));
                }
                else
                {
                    w.SetState(new SleepState());
                    w.WriteProgram();
                }
            }
        }
    }
    
    class RestState : State
    {
        public override void WriteProgram(Work w)
        {
            Console.WriteLine(string.Format("go home at {0}", w.Hour));
        }
    }
    
    class SleepState :State
    {
        public override void WriteProgram(Work w)
        {
            Console.WriteLine(string.Format("sleep at {0}", w.Hour));
        }
    }
    
    class Work
    {
        int _hour;
        public int Hour
        {
            get { return _hour; }
            set { _hour = value; }
        }
    
        bool _finish = false;
        public bool TaskFinished
        {
            get { return _finish; }
            set { _finish = value; }
        }
    
        /// <summary>
        /// 当前状态
        /// </summary>
        State _current;
    
        public void SetState(State st)
        {
            this._current = st;
        }
    
        public Work()
        {
            this._current = new ForenoonState();
        }
    
        /// <summary>
        /// 执行状态对应的方法
        /// </summary>
        public void WriteProgram()
        {
            this._current.WriteProgram(this);
        }
    }
    
    // 业务代码: 
    Work w = new Work();
    w.Hour = 22;
    w.WriteProgram();
    

    抽象状态类定义每个状态需要实现的方法,然后继承抽象状态类的状态类都实现该方法;
    定义一个 Context 类关联当前状态、设置当前状态、执行状态对应方法的方法。

  • 相关阅读:
    专门针对初学者的Node.js教程
    windows版的node.js简单示例
    bzoj 1003: [ZJOI2006]物流运输【spfa+dp】
    bzoj 3573: [Hnoi2014]米特运输【树形dp+瞎搞】
    bzoj 1082: [SCOI2005]栅栏【二分+dfs】
    bzoj 2440: [中山市选2011]完全平方数【莫比乌斯函数+二分】
    bzoj 1049: [HAOI2006]数字序列【dp+二分+瞎搞】
    bzoj 2588: Spoj 10628. Count on a tree【主席树+倍增】
    bzoj 4551: [Tjoi2016&Heoi2016]树【并查集】
    bzoj 4310: 跳蚤【后缀数组+st表+二分+贪心】
  • 原文地址:https://www.cnblogs.com/MichaelLoveSna/p/14199036.html
Copyright © 2011-2022 走看看