/** * @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(); } }
打印
切换为窗体状态 切换为全屏状态 切换为窗体状态 切换为全屏状态