本文共 3988 字,大约阅读时间需要 13 分钟。
面向对象设计其实就是希望做到代码的责任分解
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
比如我们写代码的行为,取决于我们的身体状态。 身体状态的转变,行为也跟着变化。
(1)工作类,会根据不同的身体状态发生变化
package com.state;public class Work { private State current; public Work(){ current=new ForenoonState(); //工作状态初始化为最早的状态 } public State getCurrent() { return current; } public void setCurrent(State current) { this.current = current; } private int hour; //状态转换的依据 private boolean finish=false; //是否能下班的依据 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 void WriteProgram(){ current.WriteProgram(this); }}
(2)抽象状态类
package com.state;public abstract class State { public abstract void WriteProgram(Work w);}
(3)早上状态类
package com.state;//上午的工作状态public class ForenoonState extends State{ @Override public void WriteProgram(Work w) { if(w.getHour()<12){ System.out.println(w.getHour()+" 上午工作,精神百倍!"); }else{ //超过12点,就转入中午工作状态 w.setCurrent(new NoonState()); w.WriteProgram(); } }}
(2)中午状态类
package com.state;public class NoonState extends State{ @Override public void WriteProgram(Work w) { if(w.getHour()<13){ System.out.println(w.getHour()+" 饿了,午饭;困了午睡。"); }else{ w.setCurrent(new AfternoonState()); w.WriteProgram(); } }}
(3)下午状态类
package com.state;public class AfternoonState extends State{ @Override public void WriteProgram(Work w) { if(w.getHour()<17){ System.out.println(w.getHour()+" 下午状态不错,坚持!"); }else{ w.setCurrent(new EveningState()); //状态转到晚上 w.WriteProgram(); } }}
(4)晚上状态类
package com.state;public class EveningState extends State{ @Override public void WriteProgram(Work w) { if(w.isFinish()){ w.setCurrent(new RestState()); //完成任务,下班 w.WriteProgram(); }else{ if(w.getHour()<21){ System.out.println(w.getHour()+" 加班,非常累!"); } else{ w.setCurrent(new SleepingState()); w.WriteProgram(); //状态转到睡眠 } } }}
(5)下班状态类
package com.state;public class RestState extends State{ @Override public void WriteProgram(Work w) { System.out.println(w.getHour()+" 下班了!"); }}
(6)睡觉状态类
package com.state;public class SleepingState extends State{ @Override public void WriteProgram(Work w) { System.out.println(w.getHour()+" 睡觉。"); }}
(7)客户端类
package com.state;public class Client { public static void main(String[] args) { Work emergencyProjects=new Work(); emergencyProjects.setHour(9); emergencyProjects.WriteProgram(); emergencyProjects.setHour(12); emergencyProjects.WriteProgram(); emergencyProjects.setHour(13); emergencyProjects.WriteProgram(); emergencyProjects.setHour(14); emergencyProjects.WriteProgram(); emergencyProjects.setHour(17); emergencyProjects.WriteProgram(); emergencyProjects.setFinish(true); //emergencyProjects.setFinish(false); emergencyProjects.setHour(19); emergencyProjects.WriteProgram(); emergencyProjects.setHour(22); emergencyProjects.WriteProgram(); }}
(8)执行结果
9 上午工作,精神百倍!12 饿了,午饭;困了午睡。13 下午状态不错,坚持!14 下午状态不错,坚持!17 加班,非常累!19 下班了!22 下班了!
转载地址:http://svfdi.baihongyu.com/