在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。
在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。
在行为受状态约束的时候使用状态模式,而且状态不超过 5 个。
/**
* 抽象状态类
*/
public interface IWaterState {
void printState();
}
/**
* 冰水
*/
public class IceWaterState implements IWaterState {
@Override
public void printState() {
System.out.println("Now state: Ice Water");
}
}
/**
* 温水
*/
public class WarmWaterState implements IWaterState {
@Override
public void printState() {
System.out.println("Now state: Warm Water");
}
}
/**
* 沸水
*/
public class BoilingWaterState implements IWaterState {
@Override
public void printState() {
System.out.println("Now state: Boiling Water");
}
}
/**
* 环境类
*/
public class WaterContext {
private IWaterState mIWaterState;
public IWaterState getIWaterState() {
return mIWaterState;
}
public void setIWaterState(int i) {
if (i == 0) {
mIWaterState = new IceWaterState();
return;
}
if (i == 1) {
mIWaterState = new WarmWaterState();
return;
}
if (i == 2) {
mIWaterState = new BoilingWaterState();
return;
}
}
}
public class MyClass {
public static void main(String[] args) {
IWaterState iWaterState;
WaterContext waterContext = new WaterContext();
//模拟状态改变
for (int i = 0; i < 3; i++) {
waterContext.setIWaterState(i);
iWaterState = waterContext.getIWaterState();
System.out.println("i=" + i);
iWaterState.printState();
}
}
}
public class MyClass {
public static void main(String[] args) {
IWaterState iWaterState;
WaterContext waterContext = new WaterContext();
//模拟状态改变
for (int i = 0; i < 3; i++) {
waterContext.setIWaterState(i);
iWaterState = waterContext.getIWaterState();
System.out.println("i=" + i);
iWaterState.printState();
}
}
}