生活中大部分东西都用容易变的和不容易变的,容易变的我们叫这个东西处于某种状态。比如人睡觉时你不要吵醒他。有时候某种状态影响对象整个的外部表现:像水和冰给人感觉就不是一个东西了,这时候我们就可以用状态模式了:
public class State {
public interface IWaterState {
void printState();
}
public static class IceState implements IWaterState {
@Override
public void printState() {
System.out.println("冰,固态可砸碎");
}
}
public static class WaterState implements IWaterState {
@Override
public void printState() {
System.out.println("水,液态可以喝");
}
}
public static class WaterContext implements IWaterState {//不同的状态用不同类的方法,环境类将其自由变换
private IWaterState mIWaterState;
public void setIWaterState(int i) {
switch (i) {
case 0:
mIWaterState = new IceState();
break;
case 1:
mIWaterState = new WaterState();
break;
}
}
@Override
public void printState() {
mIWaterState.printState();
}
}
public static void main(String[] args) {
WaterContext waterContext = new WaterContext();
//模拟状态改变
waterContext.setIWaterState(0);
waterContext.printState();
waterContext.setIWaterState(1);
waterContext.printState();
}
}
输出:
冰,固态可砸碎
水,液态可以喝
在用状态模式的时候要区分什么是跟随状态变化的,什么不是。
觉得容易理解的话面向对象的23种设计模式点这里