• 状态模式


    用途:切割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);
            }
        }
    
    }
  • 相关阅读:
    Java笔记(06):如何使用JDK提供的帮助文档
    Java笔记(05):面向对象--继承
    MySql:基本SQL
    Oracle:简单SQL程序、存储过程、触发器
    Oracle:批量操作、视图、序列、简单SQL程序
    力扣(LeetCode)两整数之和 个人题解
    力扣(LeetCode)买卖股票的最佳时机 个人题解
    力扣(LeetCode)环形链表 个人题解
    力扣(LeetCode)找不同 个人题解
    力扣(LeetCode)从不订购的客户-数据库题 个人题解
  • 原文地址:https://www.cnblogs.com/zhuyapeng/p/11848778.html
Copyright © 2020-2023  润新知