Semantyka. Z Wikipedii :
Diagram klas UML dla wzorca Strategy jest taki sam, jak diagram dla wzorca Bridge. Jednak te dwa wzorce projektowe nie są takie same w zamierzeniu. Podczas gdy wzorzec strategii jest przeznaczony do zachowania, wzorzec mostka jest przeznaczony do struktury.
Połączenie między kontekstem a strategiami jest ściślejsze niż połączenie między abstrakcją a implementacją we wzorcu Bridge.
Jak rozumiem, używasz wzorca strategii, gdy wyodrębniasz zachowanie, które może być dostarczone z zewnętrznego źródła (np. Config może określać ładowanie zestawu wtyczki) i używasz wzorca mostu, gdy używasz te same konstrukcje, aby Twój kod był nieco schludniejszy. Rzeczywisty kod będzie wyglądał bardzo podobnie - po prostu stosujesz wzorce z nieco innych powodów .
Wzorzec Bridge jest wzorem strukturalnym (JAK BUDOWAĆ ELEMENT OPROGRAMOWANIA?). Wzorzec Strategii jest wzorcem dynamicznym (JAK CHCESZ PROWADZIĆ ZACHOWANIE W OPROGRAMOWANIU?).
Składnia jest podobna, ale cele są różne:
źródło
Strategia:
Intencja to możliwość zamiany zachowań w czasie wykonywania
Most
Intencją jest całkowite oddzielenie abstrakcji od implementacji
źródło
Myślałem o tym samym, ale ostatnio musiałem użyć mostu i zdałem sobie sprawę, że most używa strategii i dodaje abstrakcję do kontekstu, aby później można było wprowadzić więcej zmian bez zmiany klienta. Podczas korzystania ze strategii bez abstrakcji projekt nie jest tak elastyczny i może wymagać późniejszych zmian po stronie klienta. Ale przy zastosowaniu całego mostu konstrukcja staje się jeszcze bardziej elastyczna. Tutaj możesz zobaczyć, jak przejście od strategii do mostu zapewnia większą elastyczność. Zakładamy również, że teraz „visa” i „master” są dostępne nie tylko na kartach, ale także w telefonach i chipach; a jeśli użyjemy mostka, znacznie łatwiej będzie dodać to wsparcie.
źródło
Mostek : (wzór strukturalny)
Wzorzec mostu oddziela abstrakcję od implementacji i umożliwia niezależną zmianę obu.
Użyj tego wzorca, gdy:
Strategia: (wzorzec behawioralny)
Wzorce strategii umożliwiają przełączanie się między wieloma algorytmami z rodziny algorytmów w czasie wykonywania.
Użyj wzorca strategii, gdy:
Powiązane posty:
Kiedy używasz wzoru mostka? Czym różni się od wzoru adaptera?
Przykład wzorca strategii ze świata rzeczywistego
źródło
Typy wzorów projektowych
Most (konstrukcyjny)
Weź pilota. Pilot posiada przyciski 1-6. To jest konkretna klasa na powyższym diagramie. Każdy przycisk będzie działał inaczej w zależności od tego, czy pilot jest używany do telewizora, czy do odtwarzacza DVD. Funkcjonalność każdego przycisku jest wyodrębniona z implementacji przez interfejs implementatora.
Dzięki temu możemy zmienić sposób działania pilota na każdym urządzeniu.
Strategia (behawioralna)
W strategii, gdybyśmy patrzyli na scenariusz zdalny. „Stan” to cały pilot, który wymieniamy, zmieniając odniesienie do stanu kontekstu. „ConcreteStateA” (pilot do telewizora) „concreteStateB” (pilot DVD).
Dodatkowe lektury:
źródło
Wzorzec strategii jest używany do decyzji behawioralnych, a wzorzec mostu do decyzji strukturalnych.
Brigde Pattern oddziela abstrakcyjne elementy od szczegółów implementacji, podczas gdy Strategy Pattern zajmuje się zwiększeniem wymienności algorytmów.
Wzorzec strategii w UML
Wzorzec Brigde w UML
Wzorzec strategii w Swift:
Wzór Brigde w Swift:
źródło
Stereo
zTV
i kod po prostu działa.Dodając do odpowiedzi willcodejavaforfood, mogą one być takie same w realizacji. Jednak strategia jest używana do zamiany strategii, takich jak strategia sortowania, podczas gdy mostek służy do łączenia implementacji dwóch obiektów, powiedzmy opakowania bazy danych i karty sieciowej, aby kod klienta mógł używać jednego z tych samych funkcji API. Więc nazewnictwo mówi wszystko
źródło
Z wiki o wzorcu strategii
źródło
Aby dodać do tego, co już zostało powiedziane na temat porównania wzorców (różnica intencji, ...): wzorzec Bridge jest również celowo skonstruowany, aby umożliwić zmianę strony hierarchii abstrakcji. W językach takich jak C # może to oznaczać, że masz bazę abstrakcji, która zawiera metody wirtualne jako sposób na dopuszczenie zamierzonych odmian, które nie powodują problemów dla istniejących konsumentów. Poza tym te dwa wzory mogą w większości wyglądać identycznie.
źródło
Wzorzec strategii jest używany, gdy chcesz podłączyć algorytm lub strategię w czasie wykonywania. Jako kategoria wzorca oznacza również, że zajmuje się zachowaniem obiektów. Z drugiej strony most jest wzorem strukturalnym i dotyczy strukturalnej hierarchii obiektów. Oddziela abstrakcję od implementacji, wprowadzając między nimi wyrafinowaną abstrakcję. Dopracowaną abstrakcję można pomylić z włączoną strategią czasu wykonywania (wzorzec In Strategy). Wzorzec mostu zajmuje się aspektami strukturalnymi, zapewniając mechanizm pozwalający uniknąć tworzenia n liczby klas.
źródło
W przypadku wzorca strategii zmienia się tylko realizacja.
Załóżmy, że klasa A używa klasy B, która ma wiele dostępnych implementacji. W takim przypadku B byłby abstrakcyjny z rzeczywistą implementacją dostarczoną w czasie wykonywania. To jest wzorzec strategii
Otóż, jeśli sam A jest abstrakcyjny. Zarówno A, jak i B mogą się różnić. Możesz użyć wzorca mostka.
źródło
Myślę, że jest między nimi niewielka różnica w kontekście, w jakim są używane.
Używam wzorca Bridge, aby oddzielić pojęcia ortogonalne, z których oba należą do większego - aby umożliwić im niezależne zmiany. Zwykle obejmuje wiele abstrakcji.
IMO, wzorzec strategii jest prostszy lub bardziej płaski. Z pewnością służy OCP, ale niekoniecznie musi być częścią innej i większej koncepcji, takiej jak wzorzec Bridge.
źródło