一、UML类图
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e4f52efc8a7969bbb6f17a13a5f96237.png#pic_center)
二、代码示例
public class Client {
public static void main(String[] args) {
Context context = new Context();
context.setState(new ConcreteStateA());
context.request();
}
}
public interface State {
void handle(Context context);
}
public class ConcreteStateA implements State{
@Override
public void handle(Context context) {
context.setState(new ConcreteStateB());
}
}
public class ConcreteStateB implements State{
@Override
public void handle(Context context) {
context.setState(new ConcreteStateA());
}
}
public class Context {
private State state;
public void setState(State state) {
this.state = state;
}
public void request() {
state.handle(this);
}
}
三、角色介绍
- Client(客户端):
客户端角色,程序的调用者。 - State(状态):
该角色表示状态,定义了根据不同状态进行不同处理的接口,该接口是那些处理内容依赖于状态的方法的集合。 - ConcreteState(具体的状态):
该角色表示各个具体的状态,实现了State接口。 - Context(上下文):
该角色持有表示当前状态的ConcreteState角色,并定义了供外部调用者使用State模式的接口。