前言:在行为受状态约束的时候使用状态模式,而且状态不超过 5 个(谨用)。这里举一个饮水机与水桶的例子
JAVA语言版状态模式
创建状态接口:
public interface BucketState {
void press();
}
创建状态接口的实现类:
public class BucketStateFull implements BucketState{
@Override
public void press() {
System.out.println("正在倒水");
}
}
public class BucketStateNull implements BucketState{
@Override
public void press() {
System.out.println("没有水了");
}
}
创建饮水机实体类:
public class WaterDispenser {
private int capacity = 5;
private BucketState bucketState;
public WaterDispenser(BucketState bucketState) {
this.bucketState = bucketState;
}
public void press() {
capacity--;
if (capacity <= 0) {
this.bucketState = new BucketStateNull();
}
bucketState.press();
}
}
使用StatePatternDemo类演示接水饮水机状态改变
public class StatePatternDemo {
public static void main(String[] args) {
WaterDispenser waterDispenser =new WaterDispenser(new BucketStateFull());
for(int i=0;i<5;i++){
waterDispenser.press();
}
}
}
输出结果:
正在倒水
正在倒水
正在倒水
正在倒水
没有水了