Latest web development tutorials

Modo de estrategia

En el modo de Estrategia (patrón de estrategia), un acto de clase, o algoritmo se puede cambiar en tiempo de ejecución. Este tipo de patrones de diseño pertenecen los patrones de comportamiento.

En el modo de estrategia, creamos objetos y una variedad de estrategias de cambio de comportamiento como el objeto de directiva para cambiar la representación objeto de contexto. Objeto de directiva para cambiar el objeto de contexto de ejecución del algoritmo.

introducción

Intención: La definición de una familia de algoritmos, encapsula cada uno de ellos, y los hacen intercambiables.

Principalmente para resolver: En el caso de muchos algoritmos similares, el uso de si ... else traído complejo y difícil de mantener.

Cuándo utilizar: un sistema tiene muchas, muchas categorías, y para distinguirlos sólo su comportamiento inmediato.

Cómo corregir: ¿Estos algoritmos en un paquete una clase arbitrariamente sustituido.

El código de la llave: implementar la misma interfaz.

Ejemplos de aplicación: 1, las buenas ideas Zhuge Liang, cada kit es una estrategia.2, camino de viaje para viajar, optar por un paseo en bicicleta, en coche, cada una manera de viajar es una estrategia. 3, el AWT de Java LayoutManager.

Ventajas: 1, el algoritmo puede cambiar libremente.2, para evitar el uso de múltiples condicional. 3, buena escalabilidad.

Desventajas: 1, la Estrategia se incrementarán.2, todas las clases de necesidad de la exposición de la política exterior.

Escenarios de uso: 1, si hay un sistema en el que muchas clases, la diferencia entre ellos sólo en su comportamiento, a continuación, utilizar el patrón de estrategia puede elegir dinámicamente para dejar un acto en muchos comportamientos de un objeto.2, un sistema necesita elegir dinámicamente uno de varios algoritmos. 3. Si un objeto tiene una gran cantidad de comportamiento, si ese no es el modo adecuado, estos actos tuvo que usar múltiples condiciones se seleccionan para lograr comunicado.

Nota: Si la política de un sistema de más de cuatro, es necesario considerar el uso de modo mixto, para resolver el problema de la clase política de expansión.

realización

Vamos a crear un bien definidos actividades interfaz y la implementación de la entidad de interfazEstrategiaEstrategiaEstrategia.El contexto es el uso de una cierta política de clase.

StrategyPatternDemo,nuestras clases de demostración usando el contexto de política yContextoobjetos para demostrar el comportamiento cuando se utiliza para configurar o cambiar el cambio de política.

patrón de estrategia diagrama UML

Paso 1

Crear una interfaz.

Strategy.java

Estrategia interfaz pública {
   public int doOperation (int num1, int num2);
}

Paso 2

Crear clase de entidad que implementa la interfaz.

OperationAdd.java

public class OperationAdd implementa la estrategia {
   @ Override
   public int doOperation (int num1, int num2) {
      num1 + num2 regresar;
   }
}

OperationSubstract.java

OperationSubstract clase pública implementa la estrategia {
   @ Override
   public int doOperation (int num1, int num2) {
      num1 volver - num2;
   }
}

OperationMultiply.java

public class OperationMultiply implementa la estrategia {
   @ Override
   public int doOperation (int num1, int num2) {
      volver num1 * num2;
   }
}

paso 3

Crear claseContext.

Context.java

Contexto public class {
   Estrategia La estrategia privada;

   Contexto pública (estrategia Estrategia) {
      this.strategy = estrategia;
   }

   public int executeStrategy (int num1, int num2) {
      volver strategy.doOperation (num1, num2);
   }
}

Paso 4

Usar elcontextopara ver cuando se cambia laestrategia deestrategia de cambio decomportamiento.

StrategyPatternDemo.java

StrategyPatternDemo public class {
   principales argumentos (String []) {public static void
      contexto context = nuevo contexto (nueva OperationAdd ());		
      System.out.println ( "10 + 5 =" + context.executeStrategy (10, 5));

      context = nuevo contexto (nueva OperationSubstract ());		
      System.out.println ( "10 - 5 =" + context.executeStrategy (10, 5));

      context = nuevo contexto (nueva OperationMultiply ());		
      System.out.println ( "10 * 5 =" + context.executeStrategy (10, 5));
   }
}

paso 5

Verifique la salida.

10 + 5 = 15
10--5 = 5
10 * 5 = 50