Latest web development tutorials

patrón de Estado

En el modo de estado (Pattern Estado), el comportamiento de la clase se basa en un cambio de su estado. Este tipo de patrones de diseño pertenecen los patrones de comportamiento.

En el modelo de estado, creamos objetos y una variedad de estados de comportamiento junto con el estado de la representación objeto de contexto de cambios de objeto alterado.

introducción

Propósito: Permite que un objeto cambie su comportamiento se cambia en el estado interno, el objeto parece modificar su clase.

Principalmente para resolver: el comportamiento de un objeto depende de su estado (atributos), y se puede cambiar de acuerdo con su cambio de comportamiento relacionados con el estado.

Cuándo se debe utilizar: Código contiene un gran número de objetos relacionados con el estado de las instrucciones condicionales.

Cómo solucionar: el estado de las clases específicas fuera abstracto.

El código de la llave: la interfaz de modo de comando por lo general sólo un método.El estado de la interfaz que tiene uno o más métodos. Por otra parte, el método de modo de estado de implementación de la clase, por lo general el valor de retorno, o cambiar el valor de una variable de instancia. Es decir, el estado y el estado del modelo de objetos es generalmente pertinentes. métodos de la clase aplicación tienen diferentes funciones, métodos de interfaz cubiertos. modo de estado y modo de comando de la misma también se pueden utilizar para eliminar otras condiciones si ... declaración de selección más.

Ejemplos de aplicación: 1, tocando el jugador de baloncesto pueden tener un estado normal, no el estado estado anormal y normal.2, Marqués Yi de Zeng campanas, el "reloj es interfaz abstracta ',' reloj de A 'y otro estado específico, entorno específico' Bianzhong '(Contexto).

Ventajas: 1, encapsula las reglas de transformación.2, enumerar posibles estados antes de la enumeración estado necesita para determinar el estado de las especies. 3, todos con un comportamiento relacionado con el estado en una clase, y usted puede agregar fácilmente nuevo estado, sólo tiene que cambiar el estado de un objeto puede cambiar el comportamiento de los objetos. 4, permitiendo que el estado lógico de transición de estado del objeto en uno, en lugar de un gran bloque de instrucciones condicionales. 5, permite a varios objetos que comparten un entorno de objeto de estado, lo que reduce el número de objetos en el sistema.

Desventajas: 1, el patrón de estado de uso está destinado a aumentar el número de clases y objetos del sistema.2, la estructura y la aplicación de la pauta estatal son más complejos, si se utiliza incorrectamente puede causar confusión y estructura del programa de código. 3, el apoyo para el patrón de estado "Abierto Cerrado Principio" no es muy buena, se puede cambiar el estado del modelo de Estado, añadiendo nuevas clases necesidad de modificar el estado de los responsables de las transiciones de estado del código fuente, o no puede cambiar al nuevo estado, y modificar un acto de clase estado también resulta necesario modificar el código fuente de la clase correspondiente.

Escenarios de uso: 1, con el comportamiento de cambio de estado y de cambio de escena.2, rama condicional sustituto comunicado.

Nota: Cuando se utiliza un comportamiento estado limitada por el modo de estado, y el estado no es más de cinco.

realización

Vamos a crear una interfaz de estado y la entidadestatalclase de implementación de interfaz deEstado.El contexto es una clase con un cierto estado.

StatePatternDemo,que demuestran el uso de la clase y el estado de los objetosde contextode contexto para demostrar el cambio de comportamiento en el estado de cambio.

patrón diagrama de estado UML

Paso 1

Crear una interfaz.

State.java

public interface State {
   public void doAction(Context context);
}

Paso 2

Crear clase de entidad que implementa la interfaz.

StartState.java

StartState clase pública implementa Estado {

   pública doAction vacío (contexto Contexto) {
      System.out.println ( "El jugador está en estado de inicio");
      context.setState (this);	
   }

   public String toString () {
      volver "inicio de Estado";
   }
}

StopState.java

public class StopState implements State {

   public void doAction(Context context) {
      System.out.println("Player is in stop state");
      context.setState(this);	
   }

   public String toString(){
      return "Stop State";
   }
}

paso 3

Crear claseContext.

Context.java

Contexto public class {
   Estado Estado privado;

   Contexto pública () {
      Estado = null;
   }

   pública setstate vacío (estado Estado) {
      this.state = Estado;		
   }

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

Paso 4

Usar elcontextopara ver el comportamiento cambia cuando el estado cambia deestado.

StatePatternDemo.java

public class {StatePatternDemo
   principales argumentos (String []) {public static void
      Contexto contexto = nuevo contexto ();

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

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

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

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

paso 5

Verifique la salida.

Jugador está en estado de inicio
Inicio Estado
Jugador está en estado de parada
Detener Estado