状态模式(State Pattern) :允许一个对象在其内部
状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。
![](https://img.haomeiwen.com/i528387/deca5b1b788c14d6.jpg)
Context: 场景类,维护一个状态(State)
State:抽象状态类
ConcreteState: 具体状态类
示例:模拟一个人青年、中年、老年的不同状态
/**
*
* @author apple
*
* 环境类
*
*/
public class Context {
private IState state;
public void setState(IState state) {
this.state = state;
}
public void request(String sampleParameter) {
this.state.handle(sampleParameter);
}
}
/**
* @author apple
*
* 状态类
*
*/
public interface IState {
/*
* 状态对应的处理
*/
public void handle(String sampleParameter);
}
public class ConcreteStateA implements IState {
@Override
public void handle(String sampleParameter) {
// TODO Auto-generated method stub
if (sampleParameter == "青年") {
System.out.println("青年的状态:读书学习耍盆友");
}
}
}
public class ConcreteStateB implements IState {
@Override
public void handle(String sampleParameter) {
// TODO Auto-generated method stub
if (sampleParameter == "中年") {
System.out.println("中年的状态:加班加班加班");
}
}
}
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 一个类内部发生变化,变现不同状态
// 一个人不同阶段,做不同的事 ,青年 上学 ,中年 上班, 老年: 打麻将
Context context = new Context();
// 青年时候
ConcreteStateA a = new ConcreteStateA();
context.setState(a);
context.request("青年");
// 中年时候
ConcreteStateB b = new ConcreteStateB();
context.setState(b);
context.request("中年");
// 老年时候
ConcreteStateC c = new ConcreteStateC();
context.setState(c);
context.request("老年");
}
}
应用场景:一个模型内部有多个不同状态
网友评论