Semântica. Da wikipedia :
O diagrama de classes UML para o padrão Strategy é igual ao diagrama para o padrão Bridge. No entanto, esses dois padrões de design não são os mesmos em sua intenção. Enquanto o padrão Strategy se destina ao comportamento, o padrão Bridge se destina à estrutura.
O acoplamento entre o contexto e as estratégias é mais estreito do que o acoplamento entre a abstração e a implementação no padrão Bridge.
Pelo que entendi, você está usando o padrão de estratégia ao abstrair o comportamento que pode ser fornecido de uma fonte externa (por exemplo, o config pode especificar para carregar algum conjunto de plug-in) e está usando o padrão de ponte quando usa as mesmas construções para tornar seu código um pouco mais organizado. O código real será muito semelhante - você está apenas aplicando os padrões por motivos ligeiramente diferentes .
O padrão Bridge é um padrão estrutural (COMO VOCÊ CONSTRÓI UM COMPONENTE DE SOFTWARE?). O padrão de estratégia é um padrão dinâmico (COMO VOCÊ DESEJA EXECUTAR UM COMPORTAMENTO NO SOFTWARE?).
A sintaxe é semelhante, mas os objetivos são diferentes:
fonte
Estratégia:
Intent é a capacidade de trocar o comportamento em tempo de execução
Ponte
A intenção é separar completamente a Abstração da Implementação
fonte
Eu estava pensando o mesmo, mas recentemente tive que usar bridge e percebi que bridge é usar estratégia e adicionar abstração ao contexto para que mais tarde você possa fazer mais alterações sem alterar o cliente. Ao usar o Strategy sem a abstração, o design não é tão flexível e pode exigir alterações para o cliente posteriormente. Mas ao usar a ponte inteira, o design se torna ainda mais flexível. Aqui você pode ver como passar de Estratégia para Bridge oferece mais flexibilidade. Também assumimos que agora "visa" e "master" não estão disponíveis apenas em cartões, mas também em telefones e chips; e se usarmos bridge é muito mais fácil adicionar esse suporte.
fonte
Ponte : (um padrão estrutural)
O padrão de ponte desacopla abstração e implementação e permite que ambas variem independentemente.
Use este padrão quando:
Estratégia: (padrão comportamental)
Os padrões de estratégia permitem que você alterne entre vários algoritmos de uma família de algoritmos em tempo de execução.
Use o padrão de estratégia quando:
Postagens relacionadas:
Quando você usa o padrão de ponte? Como é diferente do padrão do adaptador?
Exemplo do mundo real do padrão de estratégia
fonte
Tipos de padrão de design
Ponte (estrutural)
Pegue um controle remoto. O controle remoto possui botões 1-6. Esta é a classe concreta do diagrama acima. Cada botão funcionará de forma diferente dependendo se o controle remoto é usado para uma TV ou DVD. A funcionalidade de cada botão é abstraída da implementação pela interface do implementador.
Isso nos permite mudar a forma como o controle remoto funcionará para cada dispositivo.
Estratégia (comportamental)
Na estratégia, se estivéssemos olhando para o cenário remoto. O "estado" é todo o controle remoto que trocamos alterando a referência de estado do contexto. O "concreteStateA" (controle remoto da TV) "concreteStateB" (controle remoto do DVD).
Leitura adicional:
fonte
O Strategy Pattern é usado para decisões comportamentais, enquanto o Bridge Pattern é usado para decisões estruturais.
O Brigde Pattern separa os elementos abstratos dos detalhes de implementação, enquanto o Strategy Pattern se preocupa em tornar os algoritmos mais intercambiáveis.
Padrão de Estratégia em UML
Padrão Brigde em UML
Padrão de estratégia em Swift:
Padrão Brigde em Swift:
fonte
Stereo
comTV
e o código simplesmente funciona.Somando-se à resposta de willcodejavaforfood, eles podem ser os mesmos, em implementação. No entanto, você usa a estratégia para trocar estratégias, como estratégia de classificação, enquanto usa a ponte para fazer a ponte entre as implementações de dois objetos, digamos, um wrapper de banco de dados e um adaptador de rede para que o código do cliente possa usar qualquer um deles trabalhando na mesma API. Então, o nome realmente diz tudo
fonte
Do wiki no padrão de estratégia
fonte
Apenas para adicionar ao que já foi dito sobre a comparação de padrões (diferença de intenção, ...): o padrão Bridge também é intencionalmente estruturado para permitir que o lado da hierarquia de abstração varie. Em linguagens como C #, isso pode significar que você tem uma base de abstração que contém métodos virtuais como uma forma de permitir variações pretendidas que não causam problemas para os consumidores existentes. Fora isso, os dois padrões podem parecer idênticos na maior parte.
fonte
O padrão de estratégia é usado quando você deseja conectar algoritmo ou estratégia em tempo de execução. Como categoria de padrão também implica que se trata do comportamento dos objetos. Por outro lado, a ponte é um padrão estrutural e lida com a hierarquia estrutural dos objetos. Ele separa a abstração da implementação, introduzindo uma abstração refinada entre elas. A abstração refinada pode ser confundida com a estratégia de tempo de execução conectada (padrão In Strategy). O padrão de ponte lida com os aspectos estruturais, fornecendo um mecanismo para evitar a criação de n número de classes.
fonte
Para o padrão de estratégia, apenas a implementação varia.
Suponha que a classe A esteja usando a classe B, que possui várias implementações disponíveis. Portanto, nesse caso, B seria abstrato com a implementação real fornecida em tempo de execução. Este é o padrão de estratégia
Agora, se o próprio A é abstrato. Ambos A e B podem variar. Você usaria o padrão Bridge.
fonte
Acho que há uma pequena diferença entre eles no contexto em que estão sendo usados.
Eu uso o padrão Bridge para separar conceitos ortogonais que pertencem a um conceito maior - para deixá-los variar independentemente. Geralmente envolve várias abstrações.
IMO, o padrão de estratégia é mais simples ou mais plano. Ele serve para OCP com certeza, mas não necessariamente para fazer parte de outro conceito maior como o padrão Bridge.
fonte