Encapsula los estados de un objeto como objetos discretos, cada uno perteneciendo a una subclase separada de una clase abstracta de estado
Multiples objetos deben cambiar dinamicamente sus atributos, o su estado. Cuando un objeto es notificado de un evento, debe cambiar de estado
El diagrama UML es el siguiente: 
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