2011-10-09 22 views
10

Acabo de aprender el patrón Bridge y su intención: Desacoplar una abstracción de su implementación para que los dos puedan variar independientemente.AbstractFactory Versus Bridge Pattern

Pero ¿por qué no podría simplemente un AbstractFactory hacer lo mismo?

Sé que un AbstractFactory puede crear un puente en particular, pero mi pregunta se refiere al uso de AbstractFactory en su lugar Bridge para desacoplar Abstracción e Implementación.

¿Podría explicarme la diferencia real entre AbstractFactory y Bridge Pattern?

Respuesta

4

En primer lugar, el patrón de puente de lo que he leído es más para cuando la clase y lo que hace varía a menudo. La clase en sí puede considerarse como la implementación y el comportamiento de la clase como la abstracción.

The Abstract Factory, por otro lado, proporciona una interfaz para crear grupos de objetos relacionados o dependientes, sin especificar sus clases concretas; sus preocupaciones de implementación.

Así que, supongo que para resumir, estás comparando manzanas con naranjas y quizás de ahí viene la confusión. Son para resolver diferentes problemas.

Para mí, las operaciones implican métodos en Java, por lo que las operaciones se definen o declaran por la abstracción, pero se implementan en la propia clase. Entonces, sí, la abstracción simplemente declara lo que las operaciones podrían hacer en cuanto a comportamiento, pero las implementaciones reales se hacen en la clase. Además, la fábrica abstracta también es correcta.

Supongo que la parte que define el puente es que podría tener conjuntos de abstracciones que varían en función de una abstracción.

Patrones de diseño utiliza la palabra abstracción para referirse a una clase que se basa en un conjunto de operaciones abstractas, donde son posibles varias implementaciones del conjunto de operaciones abstractas.

Consulte estos enlaces para más información:

Using Abstractions and the Bridge Pattern in Java

Wikipedia: Bridge_Pattern

Bridge Pattern in Java

The Bridge Pattern Design Pattern

+1

Gracias por esta explicación. Solo dime si tengo razón: con Bridge, se espera que todas las operaciones primitivas sean implementadas por los implementadores y no la abstracción en sí misma.Por otro lado, con AbstractFactory, su intención es solo crear objetos (por ejemplo, objetos que contengan en el lado de abstracción del patrón de puente), pero este patrón nunca espera que todas las operaciones primitivas tengan que implementarse en el lado de abstracción. Por lo tanto, no se espera usar siempre delegación como objectCreatedByFactory.doSomething() para todas las operaciones primitivas – Mik378

1

Sí. Son similares. AF se utiliza para crear familias de objetos. Donde, como Bridge, se trata más de comportamiento y también permite un acoplamiento flexible entre el algoritmo y la plataforma.

por ejemplo: Supongamos que desarrollamos un programa para el diagnóstico de redes utilizando Ping y Traceroute, los comandos en diferentes plataformas son diferentes. Abstract factory se puede usar para obtener una instancia de ping o traceroute para cualquiera de las plataformas. No termina ahí. Bridge nos permite desarrollar un algoritmo de nivel superior utilizando los comandos ping y trace devueltos por AF. El algoritmo que puede usar una secuencia diferente de ping y traceroute, según la plataforma, se puede abstraer de los detalles de implementación específicos de la plataforma mediante el patrón de bridge.

1

Existen algunas diferencias y no podemos compararlas.

  1. Abstract Factory escreacional patrón de diseño, que se ocupa de la creación de objetos. Puente es diseño estructural patrón, que se ocupa de la estructura y composición de clase.

  2. En Puente, la abstracción y la implementación varían de forma independiente. Pero en fábrica abstracta, si cambia la abstracción (interfaz), debe cambiar el cliente.

abstract_factory patrón de caso de uso:

  1. Cuando el sistema tiene que crear varias familias de productos o si desea proporcionar una biblioteca de productos sin exponer los detalles de implementación.

Lista de comprobación:

  1. Decidir si los servicios de "independencia de la plataforma" y de creación son la fuente de corriente de dolor.
  2. Trace una matriz de "plataformas" frente a "productos".
  3. Defina una interfaz de fábrica que consiste en un método de fábrica por producto.
  4. Defina una clase derivada de fábrica para cada plataforma que encapsula todas las referencias al nuevo operador.
  5. El cliente debe retirar todas las referencias a las nuevas y utilizar los métodos de fábrica para crear los objetos del producto.

bridge patrón:

Se usa cuando:

  1. que desea ejecutar el enlace en tiempo de la aplicación,
  2. tiene una proliferación de clases desde una interfaz acoplada y numerosas implementaciones,
  3. desea compartir una implementación entre varios objetos,
  4. necesita ma jerarquías de clase p ortogonales.

preguntas relacionadas: SE

Does the Bridge Pattern decouples an abstraction from implementation?

What is the basic difference between the Factory and Abstract Factory Patterns?

Eche un vistazo a este artículo y journaldevsourcemaking artículo para la comprensión en profundidad de los diversos patrones de diseño.