java设计模式——状态模式
2013-02-19 21:18
302 查看
《大话设计模式》第十六章
运行:
该模式可以用在状态机里。
package ch16; public class Work { private int hour; private State state; private boolean finish = false; public Work() { state = new ForenoonState(); } public int getHour() { return hour; } public void setHour(int hour) { this.hour = hour; } public boolean isFinish() { return finish; } public void setFinish(boolean finish) { this.finish = finish; } public State getState() { return state; } public void setState(State state) { this.state = state; } public void writeProgram() { state.writeProgram(this); } }
package ch16; public abstract class State { public abstract void writeProgram(Work work); }
package ch16; public class ForenoonState extends State { @Override public void writeProgram(Work work) { if (work.getHour() < 12) { System.out.println("当前时间:" + work.getHour() + ",上午"); } else { work.setState(new NoonState()); work.writeProgram(); } } }
package ch16; public class NoonState extends State { @Override public void writeProgram(Work work) { if (work.getHour() < 13) { System.out.println("当前时间:" + work.getHour() + ",中午"); } else { work.setState(new AfternoonState()); work.writeProgram(); } } }
package ch16; public class AfternoonState extends State { @Override public void writeProgram(Work work) { if (work.getHour() < 17) { System.out.println("当前时间:" + work.getHour() + ",下午"); } else { work.setState(new EveningState()); work.writeProgram(); } } }
package ch16; public class EveningState extends State { @Override public void writeProgram(Work work) { if (work.isFinish()) { work.setState(new RestState()); work.writeProgram(); } else { if (work.getHour() < 21) { System.out.println("当前时间:" + work.getHour() + ",晚上"); } else { work.setState(new SleepingState()); work.writeProgram(); } } } }
package ch16; public class SleepingState extends State { @Override public void writeProgram(Work work) { System.out.println("当前时间:" + work.getHour() + ",睡觉"); } }
package ch16; public class RestState extends State { @Override public void writeProgram(Work work) { System.out.println("当前时间:" + work.getHour() + ",休息"); } }
package ch16; /** * 状态模式 * @author Administrator * */ public class Client { /** * @param args */ public static void main(String[] args) { Work work = new Work(); work.setHour(9); work.writeProgram(); work.setHour(10); work.writeProgram(); work.setHour(11); work.writeProgram(); work.setHour(12); work.writeProgram(); work.setHour(13); work.writeProgram(); work.setHour(14); work.writeProgram(); work.setHour(17); work.writeProgram(); // work.setFinish(true); work.setHour(19); work.writeProgram(); work.setHour(22); work.writeProgram(); } }
运行:
当前时间:9,上午 当前时间:10,上午 当前时间:11,上午 当前时间:12,中午 当前时间:13,下午 当前时间:14,下午 当前时间:17,晚上 当前时间:19,晚上 当前时间:22,睡觉
该模式可以用在状态机里。
相关文章推荐
- JAVA设计模式之 状态模式【State Pattern】
- Java 设计模式 之 状态模式(State)
- JAVA开发的23种设计模式之 --- 状态模式
- java设计模式第15弹--状态模式
- java 设计模式 状态模式
- java设计模式之状态模式
- JAVA设计模式九之状态模式State
- java 设计模式之State(状态模式)
- Java设计模式----状态模式(State)
- Java基础 - 单例(饿汉、懒汉),Runtime类,Timer,线程通信,互斥锁,线程组,线程五种状态,线程池,工厂模式,GUI,适配器设计模式
- Java设计模式_行为型_状态模式_工作还是休息
- Java 23种设计模式之状态模式
- Java设计模式之——状态模式
- Java设计模式之状态模式
- java设计模式(十二)---状态模式
- java设计模式(行为型)之状态模式
- JAVA设计模式十二:--State(状态模式)
- Java设计模式之状态模式
- Java设计模式----状态模式(State)