Semantik. Aus Wikipedia :
Das UML-Klassendiagramm für das Strategiemuster entspricht dem Diagramm für das Bridge-Muster. Diese beiden Entwurfsmuster sind jedoch in ihrer Absicht nicht gleich. Während das Strategiemuster für das Verhalten gedacht ist, ist das Brückenmuster für die Struktur gedacht.
Die Kopplung zwischen dem Kontext und den Strategien ist enger als die Kopplung zwischen der Abstraktion und der Implementierung im Brückenmuster.
Soweit ich weiß, verwenden Sie das Strategiemuster, wenn Sie Verhalten abstrahieren, das von einer externen Quelle bereitgestellt werden könnte (z. B. config könnte angeben, dass eine Plugin-Assembly geladen werden soll), und Sie verwenden das Bridge-Muster, wenn Sie es verwenden die gleichen Konstrukte, um Ihren Code ein bisschen ordentlicher zu machen. Der eigentliche Code sieht sehr ähnlich aus - Sie wenden die Muster nur aus etwas anderen Gründen an .
Das Brückenmuster ist ein Strukturmuster (WIE BAUEN SIE EINE SOFTWAREKOMPONENTE?). Das Strategiemuster ist ein dynamisches Muster (WIE MÖCHTEN SIE EIN VERHALTEN IN SOFTWARE AUSFÜHREN?).
Die Syntax ist ähnlich, aber die Ziele sind unterschiedlich:
quelle
Strategie:
Absicht ist die Fähigkeit, das Verhalten zur Laufzeit auszutauschen
Brücke
Es ist beabsichtigt, die Abstraktion vollständig von der Implementierung zu entkoppeln
quelle
Ich dachte das Gleiche, aber kürzlich musste ich Bridge verwenden und erkannte, dass Bridge Strategie verwendet und dem Kontext Abstraktion hinzufügt, damit Sie später weitere Änderungen vornehmen können, ohne den Client zu ändern. Bei Verwendung von Strategy ohne Abstraktion ist das Design nicht so flexibel und erfordert möglicherweise später Änderungen am Client. Bei Verwendung der gesamten Brücke wird das Design jedoch noch flexibler. Hier können Sie sehen, wie der Wechsel von der Strategie zur Brücke mehr Flexibilität bietet. Wir gehen auch davon aus, dass "Visum" und "Master" jetzt nicht nur auf Karten, sondern auch auf Telefonen und Chips verfügbar sind. und wenn wir Bridge verwenden, ist es viel einfacher, diese Unterstützung hinzuzufügen.
quelle
Brücke : (Ein Strukturmuster)
Das Brückenmuster entkoppelt Abstraktion und Implementierung und ermöglicht es beiden, unabhängig voneinander zu variieren.
Verwenden Sie dieses Muster, wenn:
Strategie: (Verhaltensmuster)
Mithilfe von Strategiemustern können Sie zur Laufzeit zwischen mehreren Algorithmen aus einer Familie von Algorithmen wechseln.
Verwenden Sie das Strategiemuster, wenn:
Zusammenhängende Posts:
Wann verwenden Sie das Brückenmuster? Wie unterscheidet es sich vom Adaptermuster?
Beispiel aus der Praxis für das Strategiemuster
quelle
Entwurfsmustertypen
Brücke (strukturell)
Nehmen Sie eine Fernbedienung. Die Fernbedienung verfügt über die Tasten 1-6. Dies ist die konkrete Klasse im obigen Diagramm. Jede Taste funktioniert anders, je nachdem, ob die Fernbedienung für einen Fernseher oder eine DVD verwendet wird. Die Funktionalität für jede Schaltfläche wird von der Implementierungsschnittstelle von der Implementierung abstrahiert.
Auf diese Weise können wir die Funktionsweise der Fernbedienung für jedes Gerät ändern.
Strategie (Verhalten)
In der Strategie, wenn wir das entfernte Szenario betrachten. Der "Status" ist die gesamte Fernbedienung, die wir durch Ändern der Statusreferenz des Kontexts austauschen. Die "creteStateA "(TV-Fernbedienung) "creteStateB" (DVD-Fernbedienung).
Zusätzliche Lektüre:
quelle
Das Strategiemuster wird für Verhaltensentscheidungen verwendet, während das Brückenmuster für strukturelle Entscheidungen verwendet wird.
Brigde Pattern trennt die abstrakten Elemente von den Implementierungsdetails, während Strategy Pattern darum geht, Algorithmen austauschbarer zu machen.
Strategiemuster in UML
Brigdenmuster in UML
Strategiemuster in Swift:
Brigdenmuster in Swift:
quelle
Stereo
mitTV
und der Code funktioniert einfach.Wenn Sie die Antwort von willcodejavaforfood hinzufügen, können sie in der Implementierung identisch sein. Sie verwenden jedoch eine Strategie, um Strategien wie die Sortierstrategie auszutauschen, während Sie Bridge verwenden, um die Implementierungen von zwei Objekten, z. B. einem Datenbank-Wrapper, und einem Netzwerkadapter zu überbrücken, sodass der Client-Code entweder mit derselben API arbeiten kann. Die Benennung sagt also eigentlich alles
quelle
Aus dem Wiki auf Strategiemuster
quelle
Nur um das zu ergänzen, was bereits über den Mustervergleich gesagt wurde (Unterschied der Absicht, ...): Das Bridge-Muster ist auch absichtlich so strukturiert, dass die Seite der Abstraktionshierarchie variieren kann. In Sprachen wie C # könnte dies bedeuten, dass Sie über eine Abstraktionsbasis verfügen, die virtuelle Methoden enthält, um beabsichtigte Variationen zuzulassen, die für bestehende Verbraucher keine Probleme verursachen. Ansonsten könnten die beiden Muster größtenteils identisch erscheinen.
quelle
Das Strategiemuster wird verwendet, wenn Sie den Algorithmus oder die Strategie zur Laufzeit anschließen möchten. Als Kategorie des Musters bedeutet dies auch, dass es sich um das Verhalten der Objekte handelt. Andererseits ist Brücke ein Strukturmuster und befasst sich mit der Strukturhierarchie der Objekte. Es entkoppelt die Abstraktion von der Implementierung, indem es eine verfeinerte Abstraktion zwischen ihnen einführt. Eine verfeinerte Abstraktion kann mit der eingesteckten Laufzeitstrategie (In Strategy Pattern) verwechselt werden. Das Brückenmuster behandelt die strukturellen Aspekte, indem es einen Mechanismus bereitstellt, um zu vermeiden, dass n Klassen erstellt werden.
quelle
Für das Strategiemuster variiert nur die Implementierung.
Angenommen, Klasse A verwendet Klasse B, für die mehrere Implementierungen verfügbar sind. In diesem Fall wäre B also abstrakt, und die tatsächliche Implementierung würde zur Laufzeit bereitgestellt. Dies ist ein Strategiemuster
Nun, wenn A selbst abstrakt ist. Sowohl A als auch B können variieren. Sie würden das Brückenmuster verwenden.
quelle
Ich denke, es gibt einen kleinen Unterschied zwischen ihnen in dem Kontext, in dem sie verwendet werden.
Ich benutze das Brückenmuster, um orthogonale Konzepte zu trennen, die beide zu einem größeren gehören - damit sie unabhängig voneinander variieren können. Es handelt sich normalerweise um mehrere Abstraktionen.
IMO, das Strategiemuster ist einfacher oder flacher. Es dient OCP mit Sicherheit, muss aber nicht unbedingt Teil eines anderen und größeren Konzepts wie dem Bridge-Muster sein.
quelle