Semántica. De wikipedia :
El diagrama de clases de UML para el patrón de estrategia es el mismo que el diagrama para el patrón de puente. Sin embargo, estos dos patrones de diseño no son iguales en su intención. Mientras que el patrón de estrategia está destinado al comportamiento, el patrón de puente está destinado a la estructura.
El acoplamiento entre el contexto y las estrategias es más estrecho que el acoplamiento entre la abstracción y la implementación en el patrón Bridge.
Según tengo entendido, está usando el patrón de estrategia cuando está abstrayendo el comportamiento que podría proporcionarse desde una fuente externa (por ejemplo, la configuración podría especificar cargar algún ensamblaje de complemento), y está usando el patrón de puente cuando usa las mismas construcciones para hacer su código un poco más ordenado. El código real se verá muy similar: solo está aplicando los patrones por razones ligeramente diferentes .
El patrón Bridge es un patrón estructural (¿CÓMO SE CONSTRUYE UN COMPONENTE DE SOFTWARE?). El patrón de estrategia es un patrón dinámico (¿CÓMO QUIERES EJECUTAR UN COMPORTAMIENTO EN SOFTWARE?).
La sintaxis es similar pero los objetivos son diferentes:
fuente
Estrategia:
La intención es la capacidad de intercambiar comportamientos en tiempo de ejecución
Puente
La intención es desacoplar completamente la abstracción de la implementación
fuente
Estaba pensando lo mismo, pero recientemente tuve que usar bridge y me di cuenta de que bridge es usar estrategia y agregar abstracción al contexto para que luego puedas hacer más cambios sin cambiar el cliente. Cuando se usa la estrategia sin la abstracción, el diseño no es tan flexible y puede requerir cambios para el cliente más adelante. Pero cuando se usa todo el puente, el diseño se vuelve aún más flexible. Aquí puede ver cómo pasar de la estrategia al puente ofrece más flexibilidad. También asumimos que ahora "visa" y "master" no solo están disponibles en tarjetas, sino también en teléfonos y chips; y si usamos bridge es mucho más fácil agregar ese soporte.
fuente
Puente : (un patrón estructural)
El patrón de puente desacopla la abstracción y la implementación y permite que ambas varíen de forma independiente.
Utilice este patrón cuando:
Estrategia: (patrón de comportamiento)
Los patrones de estrategia le permiten cambiar entre varios algoritmos de una familia de algoritmos en tiempo de ejecución.
Utilice el patrón de estrategia cuando:
Artículos Relacionados:
¿Cuándo usas el patrón de puente? ¿En qué se diferencia del patrón del adaptador?
Ejemplo del mundo real del patrón de estrategia
fuente
Tipos de patrones de diseño
Puente (estructural)
Toma un control remoto. El control remoto tiene botones 1-6. Esta es la clase concreta en el diagrama de arriba. Cada botón funcionará de manera diferente dependiendo de si el control remoto se usa para un televisor o DVD. La funcionalidad de cada botón se extrae de la implementación por parte de la interfaz del implementador.
Esto nos permite cambiar cómo funcionará el control remoto para cada dispositivo.
Estrategia (conductual)
En estrategia, si estuviéramos mirando el escenario remoto. El "estado" es el control remoto completo que intercambiamos cambiando la referencia de estado del contexto. El "concreteStateA" (control remoto de TV) "concreteStateB" (control remoto de DVD).
Lectura adicional:
fuente
El patrón de estrategia se usa para decisiones de comportamiento, mientras que el patrón de puente se usa para decisiones estructurales.
Brigde Pattern separa los elementos abstractos de los detalles de implementación, mientras que Strategy Pattern se ocupa de hacer que los algoritmos sean más intercambiables.
Patrón de estrategia en UML
Patrón de Brigde en UML
Patrón de estrategia en Swift:
Patrón de Brigde en Swift:
fuente
Stereo
conTV
y el código simplemente funciona.Agregando a la respuesta de willcodejavaforfood, pueden ser iguales, en implementación. Sin embargo, usa la estrategia para intercambiar estrategias como la estrategia de clasificación, mientras que usa el puente para unir las implementaciones de dos objetos, por ejemplo, un contenedor de base de datos y un adaptador de red para que el código del cliente pueda usar cualquiera de los dos trabajando contra la misma API. Entonces, el nombre lo dice todo
fuente
De la wiki sobre el patrón de estrategia
fuente
Solo para agregar a lo que ya se ha dicho sobre la comparación de patrones (diferencia de intención, ...): el patrón Bridge también está estructurado intencionalmente para permitir que varíe el lado de la jerarquía de abstracción. En lenguajes como C #, esto podría implicar que tiene una base de abstracción que contiene métodos virtuales como una forma de permitir variaciones deseadas que no causen problemas a los consumidores existentes. Aparte de eso, los dos patrones pueden parecer idénticos en su mayor parte.
fuente
El patrón de estrategia se utiliza cuando desea conectar un algoritmo o estrategia en tiempo de ejecución. Como categoría de patrón también implica que se ocupa del comportamiento de los objetos. Por otro lado, el puente es un patrón estructural y se ocupa de la jerarquía estructural de los objetos. Desacopla la abstracción de la implementación al introducir una abstracción refinada entre ellas. La abstracción refinada se puede confundir con la estrategia de tiempo de ejecución enchufada (patrón In Strategy). El patrón de puente se ocupa de los aspectos estructurales proporcionando un mecanismo para evitar la creación de n número de clases.
fuente
Para el patrón de estrategia, solo varía la implementación.
Supongamos que la clase A está usando la clase B, que tiene varias implementaciones disponibles. Entonces, en ese caso, B sería abstracto con la implementación real proporcionada en tiempo de ejecución. Este es el patrón de estrategia
Ahora bien, si A en sí mismo es abstracto. Tanto A como B pueden variar. Usaría el patrón de puente.
fuente
Creo que hay una ligera diferencia entre ellos en el contexto en el que se utilizan.
Utilizo el patrón Bridge para separar conceptos ortogonales que pertenecen a uno más grande, para que varíen independientemente. Por lo general, implica múltiples abstracciones.
En mi opinión, el patrón de estrategia es más simple o más plano. Sirve para OCP con seguridad, pero no necesariamente para ser parte de otro concepto más grande como el patrón Bridge.
fuente