设计模式之:状态(State)模式
2016-01-27 13:48
507 查看
[java] view
plain copy
print?
/**
* @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("切换为全屏状态");
}
}
[java] view
plain copy
print?
/**
* 状态的使用
* @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();
}
}
[java] view
plain copy
print?
/*
* 状态(State)模式 行为型模式
* 既改变对象的状态,又改变对象的行为
* 根据状态,改变行为
*/
public class Test {
public static void main(String[] args) {
/*
* 本例的 状态值只有两个,由状态类自身控制
* 也可以把状态值的控制,交由客户端来设置
*/
WindowContext context = new WindowContext(new WindowState("窗口"));
context.switchState();
context.switchState();
context.switchState();
context.switchState();
}
}
打印
[plain] view
plain copy
print?
切换为窗口状态
切换为全屏状态
切换为窗口状态
切换为全屏状态
plain copy
print?
/**
* @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("切换为全屏状态");
}
}
[java] view
plain copy
print?
/**
* 状态的使用
* @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();
}
}
[java] view
plain copy
print?
/*
* 状态(State)模式 行为型模式
* 既改变对象的状态,又改变对象的行为
* 根据状态,改变行为
*/
public class Test {
public static void main(String[] args) {
/*
* 本例的 状态值只有两个,由状态类自身控制
* 也可以把状态值的控制,交由客户端来设置
*/
WindowContext context = new WindowContext(new WindowState("窗口"));
context.switchState();
context.switchState();
context.switchState();
context.switchState();
}
}
打印
[plain] view
plain copy
print?
切换为窗口状态
切换为全屏状态
切换为窗口状态
切换为全屏状态
相关文章推荐
- poj1741 tree 点分治
- tabbarcontroller+navigationcontroller 导航栏错乱的问题
- android 内存泄漏排查之旅
- 谁用splunk?
- C++ 遍历文件夹以及子文件夹下所有文件
- com.alamofire.error.serialization.response Code=-1016
- android override
- mysql 各种实际常用疑难sql整理
- POJ3279 Fliptile
- 服务端嵌套json
- Win7不重启系统 使修改后的环境变量生效
- Intent
- ViewStub
- HDU 1031 Design T-Shirt
- 1002: A+B for Input-Output Practice (II)
- null transform hack 强制使用硬件加速
- MySQL高效分页解决方案集
- 集训队专题(1)1002 统计难题
- GDKOI2015D2T1
- TextureView+MediaPlayer播放本地视频