State

1 Sinopsis

Encapsula los estados de un objeto como objetos discretos, cada uno perteneciendo a una subclase separada de una clase abstracta de estado

2 Contexto

Multiples objetos deben cambiar dinamicamente sus atributos, o su estado. Cuando un objeto es notificado de un evento, debe cambiar de estado

3 Solucion

El diagrama UML es el siguiente:

4 Consecuencias

5 Ejemplo

El estado abstracto o base es el siguiente


public interface EstadoBase  {
    ....
}
See the complete code for EstadoBase here.
public void op1();
public void op2();
public void op3();

El estado que recibe eventos del contexto y responsable de cambiar los estados


public class EstadoContexto implements EstadoBase  {
    ....
}
See the complete code for EstadoContexto here.
public void op1(){ _impl.op1();}
public void op2(){ _impl.op2();}
public void op3(){ _impl.op3();}
private EstadoBase _impl=null;
public void cambiarEstado(EstadoBase nuevoEstado) {
   _impl=nuevoEstado;
}

Y los estados son


public class Estado1 implements EstadoBase  {
    ....
}
See the complete code for Estado1 here.
public void op1(){ System.out.println("Estado 1:op1");}
public void op2(){ System.out.println("Estado 1:op2");}
public void op3(){ System.out.println("Estado 1:op3");}

public class Estado2 implements EstadoBase  {
    ....
}
See the complete code for Estado2 here.
public void op1(){ System.out.println("Estado 2:op1");}
public void op2(){ System.out.println("Estado 2:op2");}
public void op3(){ System.out.println("Estado 2:op3");}

El cliente puede ser una interfaz grafica que actue en base a un estado seleccionado EstadoGUI