Java设计模式之状态模式
2017-12-19 19:13
357 查看
状态模式(state):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。解释就是状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。
抽象状态类:
public abstract class State {//抽象状态类
public abstract void handle(Context context);
}
class ConcreteStateA extends State {
@Override
public void handle(Context context) {
System.out.println("现在是在状态A");
context.setState(new ConcreteStateB());
}
}
class ConcreteStateB extends State {
@Override
public void handle(Context context) {
System.out.println("现在是在状态B");
context.setState(new ConcreteStateC());
}
}
class ConcreteStateC extends State {
@Override
public void handle(Context context) {
System.out.println("现在是在状态C");
context.setState(new ConcreteStateA());
}
}
Context类,维护一个ConcreteState子类的实例,这个实例定义当前的状态:
//Context类,维护一个ConcreteState子类的实例,这个实例定义当前的状态
public class Context {
private State state;
public Context(State state) {
this.state = state;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
public void request() {
this.state.handle(this);
}
}客户端:不断请求,不断更改状态:
public class StateClient {//客户端:不断请求,不断更改状态
public static void main(String[] args) {
Context context = new Context(new ConcreteStateA());
context.request();
context.request();
context.request();
context.request();
context.request();
}
}运行结果:
现在是在状态A
现在是在状态B
现在是在状态C
现在是在状态A
现在是在状态B状态模式的好处:
状态模式的好处是将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。是不是就是将特定的状态相关的行为都放入一个对象中,由于所有与状态相关的代码都存在于某个ConcreteState中,所以通过定义新的子类可以很容易的增加新的状态和转换,目的就是消除庞大的条件分支。
状态模式的适用场景:
当一个对象的行为取决于他的状态,并且它必须在运行时刻根据状态的改变它的行为时,就可以考虑使用状态模式了。
抽象状态类:
public abstract class State {//抽象状态类
public abstract void handle(Context context);
}
class ConcreteStateA extends State {
@Override
public void handle(Context context) {
System.out.println("现在是在状态A");
context.setState(new ConcreteStateB());
}
}
class ConcreteStateB extends State {
@Override
public void handle(Context context) {
System.out.println("现在是在状态B");
context.setState(new ConcreteStateC());
}
}
class ConcreteStateC extends State {
@Override
public void handle(Context context) {
System.out.println("现在是在状态C");
context.setState(new ConcreteStateA());
}
}
Context类,维护一个ConcreteState子类的实例,这个实例定义当前的状态:
//Context类,维护一个ConcreteState子类的实例,这个实例定义当前的状态
public class Context {
private State state;
public Context(State state) {
this.state = state;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
public void request() {
this.state.handle(this);
}
}客户端:不断请求,不断更改状态:
public class StateClient {//客户端:不断请求,不断更改状态
public static void main(String[] args) {
Context context = new Context(new ConcreteStateA());
context.request();
context.request();
context.request();
context.request();
context.request();
}
}运行结果:
现在是在状态A
现在是在状态B
现在是在状态C
现在是在状态A
现在是在状态B状态模式的好处:
状态模式的好处是将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。是不是就是将特定的状态相关的行为都放入一个对象中,由于所有与状态相关的代码都存在于某个ConcreteState中,所以通过定义新的子类可以很容易的增加新的状态和转换,目的就是消除庞大的条件分支。
状态模式的适用场景:
当一个对象的行为取决于他的状态,并且它必须在运行时刻根据状态的改变它的行为时,就可以考虑使用状态模式了。
相关文章推荐
- Java设计模式——状态模式(STATE PATTERN)
- JAVA设计模式之状态模式
- java设计模式—状态模式
- Java基础 - 单例(饿汉、懒汉),Runtime类,Timer,线程通信,互斥锁,线程组,线程五种状态,线程池,工厂模式,GUI,适配器设计模式
- JAVA设计模式:状态模式
- Java设计模式_创建型_原型模式_复制对象及状态
- (二十二)Java设计模式之状态模式
- java 设计模式 状态模式
- java设计模式(行为型)之状态模式
- JAVA设计模式(二十一)——状态模式
- JAVA-状态设计模式
- 【java设计模式】状态模式
- java设计模式---状态模式
- Java设计模式(行为型)之-状态模式
- 【状态模式】Java设计模式之状态模式
- java设计模式_状态模式
- Java设计模式(22)——行为模式之状态模式(State)
- Java设计模式之State(状态模式)
- Java设计模式之状态模式
- java设计模式——状态设计模式