16.状态模式
来源:互联网 发布:win7人工智能 编辑:程序博客网 时间:2024/06/14 16:01
package stateMode;/* * 加班状态类 普通模式实现 * * * 这就是活生生的面向过程啊 那要java何用!! 让面向对象怎么看。。。 */public class Commonly {public static void main(String[] args) {hour = 9;Work();hour = 10;Work();hour = 12;Work();hour = 13;Work();hour = 14;Work();//完成工作hour = 17;isFinished = true;Work();hour = 19;Work();hour = 22;Work();//没完成工作hour = 17;isFinished = false;Work();hour = 19;Work();hour = 22;Work();}//标记时间点static int hour = 0;//标记工作是否完成static boolean isFinished = false;/* * 工作方法 */public static void Work(){if(hour < 12){System.out.println("当前时间"+hour+"点 上午工作,精神百倍");}else if(hour < 13){System.out.println("当前时间"+hour+"点 饿了 午饭 犯困 午休");}else if(hour < 17){System.out.println("当前时间"+hour+"点 下午状态还行");}else {if(isFinished){System.out.println("当前时间"+hour+"点 下班回家");}else{if(hour < 21){System.out.println("当前时间"+hour+"点 加班 加班 疲惫不堪");}else{System.out.println("当前时间"+hour+"点 不行了 要死了");}}}}}
package stateMode;/* * 工作状态 这次最起码来一个面向对象啊 !! */public class Commonly2 {//时间private int hour;//是否完成工作private boolean isFinished;/* * 方法太长 不是很么好事 * * 违背了单一职责原则 */public void Work(){if(hour < 12){System.out.println("当前时间"+hour+"点 上午工作,精神百倍");}else if(hour < 13){System.out.println("当前时间"+hour+"点 饿了 午饭 犯困 午休");}else if(hour < 17){System.out.println("当前时间"+hour+"点 下午状态还行");}else {if(isFinished){System.out.println("当前时间"+hour+"点 下班回家");}else{if(hour < 21){System.out.println("当前时间"+hour+"点 加班 加班 疲惫不堪");}else{System.out.println("当前时间"+hour+"点 不行了 要死了");}}}}public int getHour() {return hour;}public void setHour(int hour) {this.hour = hour;}public boolean isFinished() {return isFinished;}public void setFinished(boolean isFinished) {this.isFinished = isFinished;}public static void main(String[] args) {Commonly2 commonly2 = new Commonly2();commonly2.setHour(9);commonly2.Work();commonly2.setHour(10);commonly2.Work();commonly2.setHour(12);commonly2.Work();commonly2.setHour(13);commonly2.Work();commonly2.setHour(14);commonly2.Work();//工作完成commonly2.setFinished(true);commonly2.setHour(17);commonly2.Work();commonly2.setHour(19);commonly2.Work();commonly2.setHour(22);commonly2.Work();//工作没完成commonly2.setFinished(false);commonly2.setHour(17);commonly2.Work();commonly2.setHour(19);commonly2.Work();commonly2.setHour(22);commonly2.Work();}}
package stateMode;/* * 状态模式 : * 当一个对象的内在状态改变时 允许改变其行为 这个对象看起来像是改变了其类 * * 状态模式主要解决的是 当控制一个对象状态转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类中 可以把复杂的判断逻辑简化 * */public class StateMode {public static void main(String[] args) { Work work = new Work();work.hour = 9;work.Working();work.hour = 10;work.Working();work.hour = 12;work.Working();work.hour = 13;work.Working();work.hour = 14;work.Working();//工作完成/*work.hour = 17;work.isFinished = true;work.Working();work.hour = 19;work.Working();work.hour = 22;work.Working();*///工作未完成work.hour = 17;work.isFinished = false;work.Working();work.hour = 19;work.Working();work.hour = 22;work.Working(); /* * 这个时候 如果老板强制20点之前要下班的话 只需要在EveningState这个类中修改一下判断条件就行了 */}}/* * 工作类 */class Work{private State current;/* * 构造方法 初始化current 默认早上开始办公 */public Work(){current = new morningState();}//工作时间public int hour;//工作状态public boolean isFinished;/* * 设置当前状态 */public void SetState(State state){current = state;}public void Working(){current.Working(this);}}/* * 状态抽象类 */interface State{public abstract void Working(Work work);}/* * 上午状态 */class morningState implements State{public void Working(Work work) {if(work.hour < 12){System.out.println("当前时间"+work.hour+"点 上午工作,精神百倍");}else{System.out.println("ssssssssssssssss");work.SetState(new NoonState());work.Working();}}}/* * 中午状态 */class NoonState implements State{public void Working(Work work) {if(work.hour < 13){ System.out.println("当前时间"+work.hour+"点 饿了 午饭 犯困 午休");}else{work.SetState(new AfternoonState());work.Working();}}}/* * 下午状态 */class AfternoonState implements State{public void Working(Work work) {if(work.hour < 17){System.out.println("当前时间"+work.hour+"点 下午状态还行");}else{System.out.println("1111111111111111111111");work.SetState(new EveningState());work.Working();}}}/* * 晚上状态 */class EveningState implements State{public void Working(Work work) {if(work.isFinished){work.SetState(new RestState());work.Working();}else{ if(work.hour < 21){System.out.println("当前时间"+work.hour+"点 加班 加班 疲惫不堪");}else{work.SetState(new SleepingState());work.Working();}}}}/* * 下班啊 回家睡觉啊 */class RestState implements State{public void Working(Work work) {System.out.println("当前时间"+work.hour+"点 下班回家");}}/* * 不行了 要猝死了 */class SleepingState implements State{public void Working(Work work) {System.out.println("当前时间"+work.hour+"点 不行了 要死了");}}
阅读全文
0 0
- 16.状态模式
- 状态模式(状态变化)
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- (8) Shell 函数
- c#设计模式之代理模式
- 深入理解JAVA反射机制。
- Spring+Mybatis+SpringMVC+Maven+MySql搭建实例
- Unity项目如何使用Git进行版本控制
- 16.状态模式
- sdl实现texture旋转
- (9) Shell 输入输出重定向
- express-7-request
- 几个基础算法介绍和实现——选择排序
- 17.适配器模式
- code review
- (10) Shell 实战之Tomcat 重部署
- Web前端-HeadFirst-笔记-CH10-简写vs长形式