[设计模式]State模式

《Java与模式》

又称状态对象模式。状态模式是对象的行为模式。GOF95

一个对象的行为取决于一个或者多个动态变化的属性,这样的属性叫做状态。这样的对象叫做有状态的对象(stateful)。

状态模式把一个所研究的对象的行为包装在不同的状态对象中,每一个状态对象都属于一个抽象状态的一个子类。

状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。

模式所涉及的对象包括:

  1. 抽象状态角色,state,定义一个接口,用以封装环境,context对象的一个特定的状态所对应的行为。

  2. 具体状态, concreteState角色,每一个具体状态类都实现了黄精的一个状态所对应的行为

  3. 环境角色,context,定义客户端所感兴趣的接口,并且保留一个具体状态类的实体。

public class Context{
    private State state;
    public void sampleOperation(){
         state.sampleOperation();  
    } 

    public vlid setState(State state){
   this.state = state;
}           
}

public interface State{
   void sampleOperation();
}


public class ConcreteState implements State{
   public void sampleOperation(){}
}

在什么情况下使用状态模式

1. 一个对象的行为依赖于它所处的状态,对象的行为必须随着其状态的改变而改变。

2. 对象的某个方法里依赖于一重或多重的条件转移语句,其中有大量的代码。状态模式把条件转移语句的每一个分支都包装到一个单独的类里。这使得这些条件转移分支能够以类的方式独立存在和演化。维护这些独立的类也就不再影响系统的其他部分。

原文地址:https://www.cnblogs.com/hongdanning/p/7569953.html