c#设计模式-状态模式(4)
2016-11-28 17:34
330 查看
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); } } }
相关文章推荐
- [设计模式] 状态模式-C#
- C#面向对象模式设计第二十二讲:State 状态模式(行为型模式)
- c#设计模式-状态模式(2)
- c#设计模式系列:状态模式(State pattern)
- C# 设计模式-状态(State)
- 《模式——工程化实现及扩展》(设计模式C# 版)《状态模式 State》——“自我检验" 参考答案
- (C#)设计模式之状态模式
- c#设计模式-状态模式(3)
- C# 设计模式系列教程-状态模式
- 201802272223->深入浅出设计模式:c#状态模式
- C# 设计模式之 状态模式
- C#设计模式系列:状态模式(State)
- C#设计模式——状态模式(State Pattern)
- 【C#】枚举类型Enum与状态设计模式
- 乐在其中设计模式(C#) - 状态模式(State Pattern)
- C#设计模式之21——状态模式
- 设计模式_状态模式_C#
- 乐在其中设计模式(C#) - 状态模式(State Pattern)
- C#设计模式之十八状态模式(State Pattern)【行为型】
- C#设计模式之十八状态模式(State Pattern)【行为型】