1.核心:用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题
2.角色:
<1>Context环境类:维护一个State对象,定义了当前的状态,并控制状态的切换
<2>State抽象状态类
<3>ConcreteState具体状态类:每一个类封装一个状态对应的行为
3.开发中的场景:
-银行系统中账号状态的管理
-OA系统中公文状态的管理
-线程对象各状态之间的切换
4.示例代码:
<1>抽象状态
//抽象状态
public interface State {
void handle();
}
<2>具体状态
//具体状态
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 LivedState implements State {
@Override
public void handle() {
System.out.println("房间入住,请勿打扰");
}
}
<3>上下文环境
//环境类,持有房间状态,并实现装态切换
public class Context {
private State state;
public void setState(State state) {
this.state = state;
System.out.println("修改房间状态");
state.handle();//并对房间状态进行处理
}
}
<4>客户端
public class Client {
public static void main(String[] args) {
Context context=new Context();
State freeState=new FreeState();
State bookedState=new BookedState();
State livedState=new LivedState();
context.setState(freeState);
context.setState(bookedState);
context.setState(livedState);
}
}
执行结果:
修改房间状态
房间空闲,可预定
修改房间状态
房间已预定,可以入住
修改房间状态
房间入住,请勿打扰
4.示例用类图