Respuesta

7

La estrategia es una solución para los idiomas que no tienen funciones de primera clase. Usted transfiere un objeto de estrategia que decide alguna política que desea separar del resto del código. Piense en ordenar en Java y cómo usan los Comparadores, un Comparador es un objeto de estrategia que le permite especificar la política para clasificar por separado del algoritmo de clasificación. Eso le permite reutilizar el código al incluir diferentes estrategias.

Abstract Factory es un objeto utilizado para crear otros objetos, con la parte abstracta es que usted tiene una fábrica que devuelve una implementación de la fábrica, donde los usuarios de la fábrica de acceso a través de una interfaz. Por lo tanto, una implementación de fábrica puede intercambiarse por otra sin cambios en los usuarios de las fábricas, ya que esos usuarios dependen únicamente de las interfaces de los objetos.

+1

+1 en la primera oración – thepirat000

8

El INTENT es diferente a los detalles estructurales y de implementación. Tan pronto como comprenda esta idea fundamental que la INTENCIÓN es importante, entonces estará en el camino correcto.

Understand the role of intent in design patterns

Intent for Strategy. Este es un patrón de comportamiento

  1. Defina una familia de algoritmos, encapsule cada uno y haga que sean intercambiables. La estrategia permite que el algoritmo varíe independientemente de los clientes que lo usan.
  2. Capture la abstracción en una interfaz, entierre los detalles de implementación en las clases derivadas.

Intención para Abstract Factory. Este es un patrón de creación

  1. Proporcionan una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas.
  2. Una jerarquía que encapsula: muchas posibles "plataformas" y la construcción de un conjunto de "productos".
+0

Ok entonces, de lo que es la intención/propuso que cada uno de ellos está dirigido? Recuerdo que la estrategia está más relacionada con la elección del algoritmo correcto ... pero no se pudo encontrar algo en lo que confiar – RanZilber

0

Diseño Fábrica acto patrón como una fábrica y genera diferentes tipos de objetos en tiempo de ejecución conforme a su solicitud. Por lo tanto, el control está en tiempo de ejecución y puede decidir el objeto que necesita en tiempo de ejecución. Así que el acoplamiento entre los objetos se reducirá.

Por otro lado, el patrón de diseño de estrategia le permite tomar un mejor control de las estructuras jerárquicas mediante el uso de la relación "tiene una" relación "es una". Porque si tendemos a usar la herencia (es a) en un escenario más complejo, es posible que tengamos que anular los métodos heredados a lo largo de generaciones y evitar la reutilización del código.

Digamos que crea una clase Animal (o interfaz) y tiene un método de movimiento en ella.

Y espera crear una clase de pájaro extendiéndola. Por lo tanto, agregará características de vuelo en el método move(). Pero, ¿cuál es el caso de los pingüinos? Tendrán características para caminar.

Así que cada vez que crees un animal extendiendo la clase Animal, deberás anular el método move() una y otra vez. Puede comprender claramente que el método move() es más vulnerable a los cambios, por lo que la mejor práctica es separar la parte que cambia de los códigos centrales.

Simplemente podemos crear una jerarquía separada para los métodos de move(). Puede asignar el método move() relacionado al objeto a través de métodos setter. Entonces el control pasa al tiempo de ejecución. El siguiente diagrama ilustra ese hecho;

enter image description here

siguientes son 2 de mis entradas de blog, si lo desea, puede referirlos para más detalles.

  1. Factory Design pattern

  2. Strategy Design pattern

+0

Mejor. Le recomiendo que tenga cuidado de vincular su blog con demasiada frecuencia en general, incluso con mejores respuestas. Este cumple con el requisito de "divulgación", pero es simplemente una pelusa sin sentido. Demasiadas respuestas como esta, y * * aún se puede marcar como spam. –

Cuestiones relacionadas