El patrón de diseño de estado es principalmente para cambiar el estado en tiempo de ejecución.
Historia de patrón de estado
Las personas pueden vivir con diferentes estados financieros. Pueden ser ricos o pueden ser pobres. Los dos estados, ricos y pobres, pueden convertirse el uno al otro de vez en cuando. La idea detrás del ejemplo: la gente normalmente trabaja más duro cuando es pobre y juega más cuando es rica. Lo que hacen depende del estado en el que viven. El estado se puede cambiar en función de sus acciones, de lo contrario, la sociedad no es justa.
Diagrama de clases de patrón de estado
Aquí está el diagrama de clases. Puede comparar esto con el patrón de estrategia para comprender mejor la diferencia.
Patrón de estado código Java
El siguiente ejemplo de Java muestra cómo funciona el patrón de estado.
Clases estatales.
package com.programcreek.designpatterns.state; interface State { public void saySomething(StateContext sc); } class Rich implements State{ @Override public void saySomething(StateContext sc) { System.out.println("I'm rick currently, and play a lot."); sc.changeState(new Poor()); } } class Poor implements State{ @Override public void saySomething(StateContext sc) { System.out.println("I'm poor currently, and spend much time working."); sc.changeState(new Rich()); } } |
Clase StateContext
package com.programcreek.designpatterns.state; public class StateContext { private State currentState; public StateContext(){ currentState = new Poor(); } public void changeState(State newState){ this.currentState = newState; } public void saySomething(){ this.currentState.saySomething(this); } } |
Clase principal para pruebas
import com.programcreek.designpatterns.*; public class Main { public static void main(String args[]){ StateContext sc = new StateContext(); sc.saySomething(); sc.saySomething(); sc.saySomething(); sc.saySomething(); } } |
Resultado:
I'm poor currently, and spend much time working. I'm rick currently, and play a lot. I'm poor currently, and spend much time working. I'm rick currently, and play a lot.