Modo de estado de Java-nodo de energía

En el modo de estado (patrón de estado), el comportamiento de la clase se basa en su cambio de estado. Este tipo de patrón de diseño es un patrón de comportamiento.

En el modo de estado, creamos objetos que representan varios estados y un objeto de contexto cuyo comportamiento cambia a medida que cambia el objeto de estado.

Introducción

Intención: Permitir que un objeto cambie su comportamiento cuando cambia su estado interno y el objeto parece modificar su clase.

La solución principal: el comportamiento de un objeto depende de su estado (atributo), y su comportamiento relacionado se puede cambiar de acuerdo con su cambio de estado.

Cuándo usarlo: el código contiene muchas declaraciones condicionales relacionadas con el estado del objeto.

Cómo resolver: abstraer varias clases estatales concretas.

Código clave: por lo general, solo hay un método en la interfaz del modo de comando. Hay uno o más métodos en la interfaz del modo de estado. Además, el método de la clase de implementación del patrón de estado generalmente devuelve un valor o cambia el valor de una variable de instancia. En otras palabras, el modo de estado generalmente está relacionado con el estado del objeto. Los métodos de la clase de implementación tienen diferentes funciones, cubriendo los métodos en la interfaz. El modo de estado es el mismo que el modo de comando, y también se puede usar para eliminar declaraciones de selección condicional como if ... else.

Ejemplos de aplicación: ① Al jugar baloncesto, los jugadores pueden tener estados normales, anormales y anormales. ② En el timbre de Zenghouyi, 'campana es una interfaz abstracta', 'campana A' es el estado concreto y 'campana de Zenghouyi' es el contexto.

Ventajas: ① Las reglas de conversión están encapsuladas. ② Para enumerar los posibles estados, es necesario determinar el tipo de estado antes de enumerar el estado. ③ Ponga todos los comportamientos relacionados con un determinado estado en una clase, y podrá agregar fácilmente nuevos estados, y solo necesita cambiar el estado del objeto para cambiar el comportamiento del objeto. ④ Se permite que la lógica de transición de estado se integre con el objeto de estado en lugar de un enorme bloque de declaración condicional. ⑤ Puede permitir que varios objetos de entorno compartan un objeto de estado, reduciendo así el número de objetos en el sistema.

Desventajas: ① El uso del modo de estado aumentará inevitablemente el número de clases y objetos del sistema. ② La estructura y la implementación del modo de estado son relativamente complicadas y, si se usan incorrectamente, causarán confusión en la estructura y el código del programa. ③ El modo de estado no admite muy bien el "principio de apertura y cierre". Para el modo de estado que puede cambiar de estado, la adición de nuevas clases de estado debe modificar el código fuente responsable de la transición de estado; de lo contrario, no podrá cambiar a el nuevo estado y modificar algunos El comportamiento de una clase de estado también necesita modificar el código fuente de la clase correspondiente.

Escenario de uso: ① Un escenario donde el comportamiento cambia con el cambio de estado. ② Sustitución de condiciones y extractos de sucursales.

Nota: Utilice el modo de estado cuando el comportamiento esté limitado por el estado y no haya más de 5 estados.

lograr

Crearemos una interfaz de estado y una clase de estado de entidad que implementa la interfaz de estado. El contexto es una clase con un cierto estado.

StatePatternDemo, nuestra clase de demostración usa Context y objetos de estado para demostrar los cambios de comportamiento de Context cuando cambia el estado.

paso 1

Crea una interfaz.

Estado de interfaz pública { public void doAction (contexto de contexto); }

Paso 2

Cree una clase de entidad que implemente la interfaz.

StartState de clase pública implementa State {

public void doAction (contexto de contexto) { System.out.println ("El jugador está en estado de inicio"); context.setState (esto); }


public String toString () { return "Estado de inicio"; } } la clase pública StopState implementa State {



public void doAction (Contexto contextual) { System.out.println ("El jugador está en estado detenido"); context.setState (esto); }


public String toString () { return "Estado de detención"; } }


Paso 3

Cree la clase de contexto.

Contexto de clase pública { Estado privado Estado;

contexto público () { estado = nulo; }

public void setState (estado del estado) { this.state = estado; }

estado público getState () { estado de retorno; } }


Etapa 4

Utilice el contexto para ver los cambios de comportamiento cuando cambia el estado.

StatePatternDemo clase pública { public static void main (String [] args) { Context context = new Context ();

  StartState startState = new StartState();
  startState.doAction(context);

  System.out.println(context.getState().toString());

  StopState stopState = new StopState();
  stopState.doAction(context);

  System.out.println(context.getState().toString());

}
}

Paso 5

Ejecute el programa y muestre el resultado:

El jugador está en estado de
inicio Estado de inicio El
jugador está en estado de
parada Estado de parada

Supongo que te gusta

Origin blog.csdn.net/weixin_49543720/article/details/112574201
Recomendado
Clasificación