状态模式很简单,无论是理解,还是实现,都很简单。
一、定义:
1,状态模式允许一个"对象"在其内部状态改变的时候改变其行为。
2,状态模式的角色:
抽象状态,具体状态,环境(context)角色
状态模式的大多数时候是为了解决if--else过多的问题的。当if-else过多时,若重新加入一种状态,会修改原来的代码。而使用状态模式,对原来的代码没有改动,只需添加新增的状态即可。
如下QQ状态例子:
抽象状态State.java
package State;
public abstract class State {
//对应状态下的操作
public abstract void printState();
}
具体状态FirstState.java
package State;
//上线状态
public class FirstState extends State{
public void printState() {
System.out.println("状态是上线");
}
}
具体状态SecondState.java
package State;
//隐身状态
public class SecondState extends State{
public void printState() {
System.out.println("状态是隐身");
}
}
具体状态:ThirdState.java
package State;
//离线状态
public class ThirdState extends State{
public void printState() {
System.out.println("状态是 离线");
}
}
环境Context.java
package State;
public class Context {
// context的当前状态
private State state;
public Context() {
this.state = new FirstState();
}
//设置状态
public void setState(State state) {
this.state = state;
}
//执行对应状态下的操作
public void execute() {
this.state.printState();
}
}
测试代码:Client.java
package State;
public class Client {
public Client() {
Context context = new Context();
context.execute();
context.setState(new SecondState());
context.execute();
context.setState(new ThirdState());
context.execute();
}
public static void main(String[] args) {
new Client();
}
}