/**
* @author stone
*/
public class WindowState {
private String stateValue;
public WindowState(String stateValue) {
this.stateValue = stateValue;
}
public String getStateValue() {
return stateValue;
}
public void setStateValue(String stateValue) {
this.stateValue = stateValue;
}
public void handle() {
/*
* 依据不同状态做不同操作, 再切换状态
*/
if ("窗体".equals(stateValue)) {
switchWindow();
this.stateValue = "全屏";
} else if ("全屏".equals(stateValue)) {
switchFullscreen();
this.stateValue = "窗体";
}
}
private void switchWindow() {
System.out.println("切换为窗体状态");
}
private void switchFullscreen() {
System.out.println("切换为全屏状态");
}
}
/**
* 状态的使用
* @author stone
*
*/
public class WindowContext {
private WindowState state;
public WindowContext(WindowState state) {
this.state = state;
}
public WindowState getState() {
return state;
}
public void setState(WindowState state) {
this.state = state;
}
public void switchState() {
this.state.handle();
}
}
/*
* 状态(State)模式 行为型模式
* 既改变对象的状态,又改变对象的行为
* 依据状态,改变行为
*/
public class Test {
public static void main(String[] args) {
/*
* 本例的 状态值仅仅有两个,由状态类自身控制
* 也能够把状态值的控制,交由client来设置
*/
WindowContext context = new WindowContext(new WindowState("窗体"));
context.switchState();
context.switchState();
context.switchState();
context.switchState();
}
}
打印
切换为窗体状态
切换为全屏状态
切换为窗体状态
切换为全屏状态