您的位置:首页 > 编程语言 > Java开发

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,睡觉


该模式可以用在状态机里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: