行为型模式-状态模式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
- 设计模式-行为型-状态模式(State)
- 行为型模式-----状态模式(State)
- [设计模式-行为型]状态模式(State)
- 行为型模式-State ( 状态模式 )
- 行为型模式-状态模式state
- State 状态模式 ----对象行为型模式
- State 状态(行为型设计模式)
- 状态模式State(对象行为型)
- 行为型模式之状态STATE
- 状态模式State(对象行为型)
- 行为模式:State(状态)
- 设计模式深入学习--State 状态模式(行为型模式)
- 设计模式 ( 十七) 状态模式State(对象行为型)
- 设计模式(20)-行为型-状态模式(State)
- 行为型模式之状态模式(State)
- 设计模式 ( 十七) 状态模式State(对象行为型)
- 设计模式--状态模式State(行为型)
- 行为型模式7:状态模式(State Pattern)
- Java执行顺序
- 名侦探柯南(贪心问题)
- CodeForces 616B Dinner with Emma
- 实现tableView和collectionView的相互关联方法
- <LeetCode OJ> 141 / 142 Linked List Cycle(I / II)
- 行为型模式-状态模式state
- BeanUtils操作Bean的属性
- 实现应用Matrix旋转图像
- ElasticSearch path.home is not configured报错解决
- Qt程序界面美化一-- stylesheet
- Block和typedef
- vmstat
- 行为型模式-策略模式strategy
- 内存分配器一