class OldWork{ public int getHour() { return hour; } public void setHour(int hour) { this.hour = hour; } PRivate int hour; public void WriteProgram(){ if(hour<12){ System.out.println("forenoon ,good!"); }else if(hour<13){ System.out.println("need sleep!"); }else if(hour<17){ System.out.println("afernoon,go on!"); } } }在沒有使用狀態模式時,會出現大量的if else語句。使用后: class Work{ private State current; public void setCurrent(State current) { this.current = current; } public Work(){ current=new ForenoonState();} public int getHour() { return hour; } public void setHour(int hour) { this.hour = hour; } private int hour; public void WriteProgram(){ current.WriteProgram(this); } } abstract class State{ public abstract void WriteProgram(Work w); } class ForenoonState extends State{ public void WriteProgram(Work w){ if(w.getHour()<12){ System.out.println("forenoon ,good!"); } else{ w.setCurrent(new NoonState());w.WriteProgram(); } } }class NoonState extends State{ public void WriteProgram(Work w){ if(w.getHour()<13){ System.out.println("need sleep!"); } else{ w.setCurrent(new AfternoonState());w.WriteProgram(); } }}class AfternoonState extends State{ public void WriteProgram(Work w){ if(w.getHour()<17){ System.out.println("afernoon,go on!"); } else{ System.out.println("go home,tired!"); } }}測試代碼:public class TestState { public static void main(String[] args){ Work work=new Work(); work.setHour(12); work.WriteProgram(); }}輸出:need sleep!狀態模式:當一個對象的內在狀態改變時允許改變其行為。這個對象看起來像是改變了其類。
新聞熱點
疑難解答