您的位置:首页 > 其它

23种设计模式之状态模式

2018-01-27 08:37 363 查看
场景

电梯的运行

维修、正常、自动关门、自动开门、向上运行、向下运行、消防状态。

红绿灯

红灯、黄灯、绿灯

网上购物时,订单的状态

下单

已付款

已发货

送货中

已收货

核心:用于解决系统中复杂对象状态转换以及不同状态下行为的封装问题。

结构:

Context环境类

环境类中维护一个State对象,他是定义来了当前的状态。

State抽象状态类

ConcreteState具体状态类

每一个类封装了一个状态对应的行为。

举例:我们都知道宾馆有三种情况,空闲,已预订,已入住。

定义房间的状态接口

public interface State {
void handle();
}


空闲状态

public class FreeState implements State {
@Override
public void handle() {
System.out.println("房间空闲!!!没人住");
}
}


已预订状态

public class BookedState implements State {
@Override
public void handle() {
System.out.println("房间已预订!别人不能定!");
}
}


房间已入住

public class CheckedInState implements State {
@Override
public void handle() {
System.out.println("房间已入住!请勿打扰!");
}
}


Context环境变量

public class HomeContext {
State state;

public void setState(State state) {
System.out.println("修改房间状态");
this.state = state;
state.handle();
}

}


测试

HomeContext context = new HomeContext();
context.setState(new FreeState());
context.setState(new BookedState());
context.setState(new CheckedInState());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: