La diferencia entre el patrón de estrategia de Java y el patrón de fábrica
El patrón de fábrica es un patrón de creación
El patrón de estrategia es un patrón de comportamiento
Se crea un objeto de preocupación
Una encapsulación de comportamiento de preocupación
El patrón de estrategia define una serie de algoritmos que pueden reemplazarse y ampliarse cuando sea necesario. El patrón de fábrica es un patrón generativo que crea instancias específicas cuando las necesita.
Deberías considerar el uso del patrón de estrategia en las siguientes situaciones:
1. Si hay muchas clases en un sistema y la única diferencia entre ellas es su comportamiento, entonces usa patrones de estrategia. permitir dinámicamente que un objeto elija un comportamiento entre muchos.
2.
Un sistema necesita elegir dinámicamente uno de varios algoritmos. Luego, estos algoritmos se pueden empaquetar en clases de algoritmos específicas, y estas clases de algoritmos específicas son todas subclases de una clase de algoritmo abstracto. En otras palabras, estas clases de algoritmo específicas tienen una interfaz unificada. Debido al principio de polimorfismo, el cliente puede optar por utilizar cualquier clase de algoritmo específica y solo contener un objeto cuyo tipo de datos sea la clase de algoritmo abstracto.
3. Los datos utilizados por el algoritmo de un sistema no pueden ser conocidos por el cliente. El patrón Estrategia evita que los clientes tengan una exposición innecesaria a datos complejos y algorítmicamente relevantes.
4. Si un objeto tiene muchos comportamientos, sin patrones apropiados, estos comportamientos deben implementarse utilizando múltiples declaraciones de selección condicional. En este momento, el uso de patrones de estrategia para transferir estos comportamientos a las clases de estrategias específicas correspondientes puede evitar el uso de múltiples declaraciones de selección condicional que son difíciles de mantener y reflejan el concepto de diseño orientado a objetos.
Ventajas y Desventajas del Patrón Estratégico
El Patrón Estratégico tiene muchas ventajas y desventajas. Sus ventajas son:
1. El patrón de estrategia proporciona una forma de gestionar familias de algoritmos relacionados. Una jerarquía de clases de políticas define una familia de algoritmos o comportamientos. El uso adecuado de la herencia puede mover el código público a la clase principal, evitando así la duplicación de código.
2.
El patrón de estrategia proporciona una forma de reemplazar la relación de herencia. La herencia puede manejar múltiples algoritmos o comportamientos. Si no se utiliza el patrón de estrategia, entonces la clase de entorno que utiliza el algoritmo o comportamiento puede tener algunas subclases, cada subclase proporciona un algoritmo o comportamiento diferente. Sin embargo, de esta manera los usuarios del algoritmo o comportamiento se confunden con el algoritmo o comportamiento en sí. La lógica que determina qué algoritmo utilizar o qué comportamiento adoptar se mezcla con la lógica del algoritmo o comportamiento, lo que hace imposible evolucionar de forma independiente. La herencia hace imposible cambiar dinámicamente algoritmos o comportamientos.
3. El uso del modo de estrategia puede evitar el uso de múltiples declaraciones de transferencia condicional. Las declaraciones de transferencia múltiple no son fáciles de mantener. Mezcla la lógica de qué algoritmo o comportamiento adoptar con la lógica del algoritmo o comportamiento y los enumera todos en una declaración de transferencia múltiple. Es más primitivo y atrasado que el método de herencia. .
Las desventajas del modo estrategia son:
1. El cliente debe conocer todas las clases de políticas y decidir cuál usar. Esto significa que el cliente debe comprender las diferencias entre estos algoritmos para poder seleccionar la clase de algoritmo adecuada en el momento adecuado. En otras palabras, el patrón de estrategia sólo es adecuado si el cliente conoce todos los algoritmos o comportamientos.
2. El patrón de estrategia crea muchas clases de estrategia. A veces, se puede diseñar una clase de política para que se comparta guardando el estado dependiente del entorno en el cliente, de modo que diferentes clientes puedan utilizar instancias de clase de política. En otras palabras, puede utilizar el patrón Flyweight para reducir la cantidad de objetos.
El patrón de estrategia está ampliamente relacionado con muchos otros patrones. La estrategia se confunde fácilmente con el patrón Bridge. Aunque sus estructuras son similares, están diseñadas para resolver problemas diferentes
. El modo de estrategia se centra en la encapsulación de algoritmos, mientras que el modo Puente se centra en separar la abstracción y la implementación, proporcionando diferentes implementaciones para un sistema abstracto. El modo Puente y el modo Estrategia encarnan muy bien el concepto de "Favorecer el compuesto sobre la herencia".