行为型模式-状态模式state

来源:互联网 发布:阿里云ssh登录 编辑:程序博客网 时间:2024/06/05 00:22


状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。

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


0 0
原创粉丝点击