状态模式state
核心
–用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题
结构
–Context环境类
环境类中维护一个state对象,他是定义了当前的状态
–State抽象状态类
–ConcreteState具体状态类
每一个类封装了一个状态对应的行为
模拟订住客房
package studyGFO;
public interface State {
void handle();
}
package studyGFO;
/**
* 空闲状态
* @author http://blog.csdn.net/thewaiting
*
*/
public class FreeState implements State{
@Override
public void handle() {
System.out.println("空闲");
}
}
package studyGFO;
/**
* 入住状态
* @author http://blog.csdn.net/thewaiting
*
*/
public class CheckedState implements State{
@Override
public void handle() {
System.out.println("入住");
}
}
package studyGFO;
/**
* 预定状态
* @author http://blog.csdn.net/thewaiting
*
*/
public class BookedState implements State{
@Override
public void handle() {
System.out.println("被预定");
}
}
package studyGFO;
/**
* 不同状态的切换
* @author http://blog.csdn.net/thewaiting
*
*/
public class Context {
//如果是银行系统 这个Context类就是账号,根据金额不同,切换不同的状态。
private State state;
public void setState(State s) {
System.out.println("现在的状态");
state= s;
state.handle();
}
}
package studyGFO;
public class Client {
public static void main(String[] args) {
Context context = new Context();
context.setState(new FreeState());
context.setState(new BookedState());
}
}
开发中场景
–银行系统中账号状态的管理
–OA系统中公文状态的管理
–酒店管理中,房间状态的管理
–线程对象各状态之间的切换