设计模式-状态模式
1.概述
状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
2.类图
3.角色
- State接口:定义了一个所有具体状态的共同接口,任何状态都实现这个相同的接口,这样一来,状态之间可以互相替换。
- StateA,StateB:具体的2个状态,处理来自Context的请求。
- Context类:可以拥有一些内部状态。
一些需要定义内部状态的类,都可以使用状态模式。
4.实现
1.State接口
public interface State {
void insertOneA();
void insertOneB();
}
2.StateA,StateB
public class StateA implements State{
Context context;
public StateA(Context context) {
this.context = context;
}
public void insertOneA() {
System.out.println("now is StateA,next is StateA");
}
public void insertOneB() {
System.out.println("now is StateA,next is StateB");
context.setState(context.getStateB());
}
}
public class StateB implements State{
Context context;
public StateB(Context context) {
this.context = context;
}
public void insertOneA() {
System.out.println("now is StataB,next is StateA");
context.setState(context.getStateA());
}
public void insertOneB() {
System.out.println("now is StateB,next is StateB");
}
}
3.Context
public class Context {
State StateA;
State StateB;
State now;
public Context() {
this.StateA = new StateA(this);
this.StateB = new StateB(this);
this.now = this.StateA;
}
public void setState(State state){
now = state;
}
public void insertOneA(){
now.insertOneA();
}
public void insertOneB(){
now.insertOneB();
}
public State getStateA() {
return this.StateA;
}
public State getStateB() {
return this.StateB;
}
}
4.Main
public class Main {
public static void main(String[] args) {
Context context = new Context();
context.insertOneA();
context.insertOneA();
context.insertOneB();
context.insertOneB();
context.insertOneA();
}
}