• 状态模式


    用途:切割if-else分支

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace 状态模式
    {
        class Program
        {
            static void Main(string[] args)
            {
                //紧急项目
                Work emergencyProjects = new Work();
                emergencyProjects.Hour = 9;
                emergencyProjects.WriteProgram();
                emergencyProjects.Hour = 10;
                emergencyProjects.WriteProgram();
                emergencyProjects.Hour = 12;
                emergencyProjects.WriteProgram();
                emergencyProjects.Hour = 13;
                emergencyProjects.WriteProgram();
                emergencyProjects.Hour = 14;
                emergencyProjects.WriteProgram();
                emergencyProjects.Hour = 17;
    
                //emergencyProjects.WorkFinished = true;
                emergencyProjects.TaskFinished = false;
    
                emergencyProjects.WriteProgram();
                emergencyProjects.Hour = 19;
                emergencyProjects.WriteProgram();
                emergencyProjects.Hour = 22;
                emergencyProjects.WriteProgram();
    
    
                Console.Read();
            }
        }
    
    
        //抽象状态
        public abstract class State
        {
            public abstract void WriteProgram(Work w);
        }
    
        //上午工作状态
        public class ForenoonState : State
        {
            public override void WriteProgram(Work w)
            {
                if (w.Hour < 12)
                {
                    Console.WriteLine("当前时间:{0}点 上午工作,精神百倍", w.Hour);
                }
                else
                {
                    w.SetState(new NoonState());
                    w.WriteProgram();
                }
            }
        }
    
        //中午工作状态
        public class NoonState : State
        {
            public override void WriteProgram(Work w)
            {
                if (w.Hour < 13)
                {
                    Console.WriteLine("当前时间:{0}点 饿了,午饭;犯困,午休。", w.Hour);
                }
                else
                {
                    w.SetState(new AfternoonState());
                    w.WriteProgram();
                }
            }
        }
    
        //下午工作状态
        public class AfternoonState : State
        {
            public override void WriteProgram(Work w)
            {
                if (w.Hour < 17)
                {
                    Console.WriteLine("当前时间:{0}点 下午状态还不错,继续努力", w.Hour);
                }
                else
                {
                    w.SetState(new EveningState());
                    w.WriteProgram();
                }
            }
        }
    
        //晚间工作状态
        public 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("当前时间:{0}点 加班哦,疲累之极", w.Hour);
                    }
                    else
                    {
                        w.SetState(new SleepingState());
                        w.WriteProgram();
                    }
                }
            }
        }
    
        //睡眠状态
        public class SleepingState : State
        {
            public override void WriteProgram(Work w)
            {
                Console.WriteLine("当前时间:{0}点 不行了,睡着了。", w.Hour);
            }
        }
    
        //下班休息状态
        public class RestState : State
        {
            public override void WriteProgram(Work w)
            {
                Console.WriteLine("当前时间:{0}点 下班回家了", w.Hour);
            }
        }
    
        //工作
        public class Work
        {
            private State current;
            public Work()
            {
                current = new ForenoonState();
            }
    
            private double hour;
            public double Hour
            {
                get { return hour; }
                set { hour = value; }
            }
    
            private bool finish = false;
            public bool TaskFinished
            {
                get { return finish; }
                set { finish = value; }
            }
    
    
            public void SetState(State s)
            {
                current = s;
            }
    
            public void WriteProgram()
            {
                current.WriteProgram(this);
            }
        }
    
    }
  • 相关阅读:
    《数据挖掘系统支撑下的高考志愿填报在线咨询系统设计与实现》论文笔记(十二)
    《基于本体的高考志愿填报辅助系统的设计与实现》论文笔记(十一)
    20189312任方园《网络攻防》第十次作业
    20189312任方园《网络攻防》第九次作业
    20189312任方园《网络攻防》第八次作业
    20189312任方园《网络攻防》第七次作业
    20189312任方园《网络攻防》第六次作业
    20189312任方园《网络攻防》第五次作业
    20189312任方园《网络攻防》第四次作业
    20189312任方园《网络攻防》第三次作业
  • 原文地址:https://www.cnblogs.com/zhuyapeng/p/11848778.html
Copyright © 2020-2023  润新知