zoukankan      html  css  js  c++  java
  • 状态模式

    用途:切割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);
            }
        }
    
    }
  • 相关阅读:
    【SQL】oralce中使用group by和case when按照条件求和
    【SQL】ORACLE在sqlplus中使用spool方式生成建表语句
    【SQL】将特定的元素按照自己所需的位置排序
    【LeetCode刷题】SQL-Second Highest Salary 及扩展以及Oracle中的用法
    【LeetCode刷题】SQL-Combine Two Tables
    CSDN无故封我账号,转战博客园。
    Visual Studio 代码管理器svn插件下载
    Geoserver的跨域问题
    Jmeter+Ant+jenkins实现api自动化测试的持续集成
    python编程中的并发------多线程threading模块
  • 原文地址:https://www.cnblogs.com/zhuyapeng/p/11848778.html
Copyright © 2011-2022 走看看