






























状态模式(State)构架出一套完备的事物内部状态转换机制,并将内部状态包裹起来且对外部不可见,使其行为能随其状态的改变而改变,同时简化了事物的复杂的状态变化逻辑。
允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
**in short 将一个对象(水)的状态从该对象中分离出来, 封装到专门的状态类(固态, 液态, 气态)中 (用类来表示状态) ,使得对象状态可以灵活变化(状态切换doSwitct(Water context);) **
**例如 '坦克大战'中游戏暂停机制, 可将'游戏对象' 中的所有子弹, 坦克, 位置 朝向状态抽离出来, 可以随时暂停 随时恢复, 使得(游戏)对象状态可以灵活变化; **
再例如: 当温度变化导致水的状态发生变化时,它就会有不同的行为,如冰会滚动、水会流动、水蒸气则会漂浮,体积,单位质量均不一样.
水在0℃状态呈固态 体积小; 在常温下的呈液态 体积中,以及100℃以上时 呈气态 体积最大;

public class Water {
private State state;
public State getState() {
return state;
}
//设置 状态
public void setState(State state) {
this.state = state;
this.state.doSwitct(this);
}
public void flow() {
this.state.doFlow();
}
public void rolling() {
this.state.doRolling();
}
}
/**
* 抽象状态定义
**/
public interface State {
/**
* 状态切换
*/
void doSwitct(Water context);
/**
* 流动 (状态特性方法)
*/
void doFlow();
/**
* 滚动.. (状态特性方法)
*/
void doRolling();
}
/**
* 固态特性
* @author yangfh
* @date 2023-12-06 20:57
**/
public class SolidityState implements State{
@Override
public void doSwitct(Water context) {
System.out.println("将 "+ context+", 状态切换为固态");
}
@Override
public void doFlow() {
System.out.println("当前是固态, 也不能流动...");
}
@Override
public void doRolling() {
System.out.println("当前是固态, 飞砂走石");
}
}
/**
* 液态特性
* @author yangfh
* @date 2023-12-06 20:57
**/
public class LiquidState implements State{
@Override
public void doSwitct(Water context) {
System.out.println("将 "+ context+", 状态切换为液态");
}
@Override
public void doFlow() {
System.out.println("当前是液态, 小桥流水人家..");
}
@Override
public void doRolling() {
System.out.println("当前是液态, 不能滚动");
}
}
/**
* 气态特性
* @author yangfh
* @date 2023-12-06 20:57
**/
public class GaseousState implements State{
@Override
public void doSwitct(Water context) {
System.out.println("将 "+ context+", 状态切换为气态");
}
@Override
public void doFlow() {
System.out.println("当前是气态, 不能流动");
}
@Override
public void doRolling() {
System.out.println("当前是气态, 不能滚动");
}
}
public static void main(String[] args) {
System.out.println("========常温环境=========");
// 常温环境: 液态状态
State state = new LiquidState();
//水 (Context)Water content = new Water();
content.setState(state);
content.flow();
content.rolling();
System.out.println("========低温环境=========");
State state2 = new SolidityState();
content.setState(state2);//设置状态
content.flow();
content.rolling();
}
/**out
========常温环境=========
将 org.yang.mca.pattern21.Water@6b71769e, 状态切换为液态
当前是液态, 小桥流水人家..
当前是液态, 不能滚动
========低温环境=========
将 org.yang.mca.pattern21.Water@6b71769e, 状态切换为固态
当前是固态, 也不能流动, 只能滚动...
当前是固态, 飞砂走石
**/
1) 状态模式的优点:
2) 状态模式的缺点:
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。