标签:img turn finish abs 定义 sys int his src
状态模式解决的是控制一个对象状态转移的表达式过于复杂的情况,把状态的判断逻辑转移表示到不同状态的一系列类中,可以把复杂的逻辑简化。
状态模式的好处是将特定状态的行为局部化,从而将不同状态的行为分割开来。
将特定状态的行为都放入一个对象中,由于与状态有关的代码都存在在具体的对象类中,因此定义新的子类可以很容易的实现增加新的状态和转换。
uml图:

State及其子类
public abstract class State {
public abstract void writeProgram(Work work);
}
public class BeforeNoon extends State {
@Override
public void writeProgram(Work work) {
if(work.getHour() < 12){
System.out.println("现在是" + Integer.toString(work.getHour())+ "点,工作!");
}
else{
work.setState(new Noon());
work.writeProgram();
}
}
}
public class Noon extends State {
@Override
public void writeProgram(Work work) {
if(work.getHour() < 14){
System.out.println("现在是" + Integer.toString(work.getHour())+ "点,午休!");
}
else{
work.setState(new AfterNoon());
work.writeProgram();
}
}
}
public class AfterNoon extends State {
@Override
public void writeProgram(Work work) {
if(work.getHour() < 17){
System.out.println("现在是" + Integer.toString(work.getHour())+ "点,工作!");
}
else{
work.setState(new Night());
work.writeProgram();
}
}
}
public class Night extends State {
@Override
public void writeProgram(Work work) {
if(work.isFinished()){
System.out.println("现在是" + Integer.toString(work.getHour())+ "点,下班!");
}
else{
System.out.println("现在是" + Integer.toString(work.getHour())+ "点,加班!");
}
}
}
Work
public class Work {
private int hour = 0;
private boolean isFinished = false;
private State state = new BeforeNoon();
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 State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
public void writeProgram() {
state.writeProgram(this);
}
}
Demo
public class StateDemo {
public static void main(String[] args) {
Work work = new Work();
for(int hour = 8; hour < 22; hour++){
work.setHour(hour);
if(hour == 19){
work.setFinished(true);
}
work.writeProgram();
}
}
}
标签:img turn finish abs 定义 sys int his src
原文地址:http://www.cnblogs.com/zcy-backend/p/6703089.html