Frage

Was ist der Unterschied zwischen Strategie Mustern und Delegation Mustern (nicht Delegierten)?

War es hilfreich?

Lösung

das Strategie-Muster ist eine sehr spezifische Design-Lösung zu einem gemeinsamen Software-Problem. das Strategie-Muster impliziert, dass es sein

  • eine Schnittstelle namens Strategie (oder mit Strategie als Teil des Namens). diese Schnittstelle eine Methode () aufgerufen auszuführen.
  • ein oder mehrere konkrete Klassen genannt etwas wie ConcreteStrategyA, ConcreteStrategyB usw., die die Strategie-Schnittstelle implementieren.
  • Es sollte auch ein Kontextklasse sein, der die Strategie
  • enthält

Delegation ist ein Haupt als ein Muster. Delegation bedeutet, dass stattdessen ein einzelnes Objekt für alles verantwortlich sein zu müssen, delegiert Aufgaben an andere Objekte. der Grund, warum dies eine übliche Technik ist, dass sie durch Verringerung Kopplung und zunehmenden Zusammenhalt zwei sogar noch grundlegenden Prinzipien der Softwareentwicklung erzwingen.

Nachdem alles gesagt, dass, keine Sorge über Muster. Konzentrieren Sie sich auf den Prinzipien und wenn Sie glauben, Ihre Lösung verbessert werden könnte, auf - schauen, um die Muster zu sehen, ob es eine bessere Mausefalle ist. Wenn Sie auf Muster statt Prinzipien konzentrieren, werden Sie sich in allen Mustern verirren und Muster zum Zwecke der Umsetzung der Muster der Umsetzung ...

Andere Tipps

„Delegation“ ist nicht wirklich ein Design-Muster, es ist eher eine allgemeine Programmiertechnik, wobei die Komponente A delegiert die Aufgabe (gleich welcher Art von Aufgabe, die sein können) zur Komponente B. Delegation kann in vielen Zusammenhängen verwendet werden.

Die Muster-Strategie, auf der anderen Seite, ist ein spezifisches Muster, die typischerweise starke Nutzung von Delegation als Implementierungs Detail macht.

Zum Beispiel könnten Sie die Strategie-Muster implementieren und rufen Sie es mit

strategy.execute(x)

Die Strategie Muster verschiedene Implementierungen Ihrer Strategie-Schnittstelle und Auswahl der entsprechende Implementierung zur Laufzeit beinhaltet haben. Der Akt der Berufung auf diese Umsetzung ist Delegation.

Es ist also nicht entweder / oder sind die Konzepte kostenlos zur Verfügung.

Hier ist ein Gedanke:

Die Delegierten imitieren die delegierenden Klasse (zumindest, wie ich sie benutzt habe, nicht sicher, ob das der üblicher Weg ist oder nicht, aber das ist, wie ich es in der Regel). Also im Grunde, wenn ich eine Klasse, die mehrere Einstiegspunkte (Methoden) hat, und ich möchte die Implementierung zur Laufzeit ändern, würde ich schaffen delegiert die die gleiche Schnittstelle implementieren.

Wenn auf der anderen Seite hatte ich einen Teil einer Klasse, die ich möchte in der Lage sein, zur Laufzeit auszutauschen, würde ich Strategy Klassen mit einer einzigen Methode Schnittstelle erstellen (zB. ExecuteCalculation) und macht es zu einem Aggregate Bestandteil die enthaltenden Klasse.

So zusammenfassend eine Strategie, ein einziges Verhalten umfasst die Delegierten eine Reihe von Verhaltensweisen implementieren, und Sie könnten die Delegierten verwenden, um Strategien umzusetzen.

Wenn Sie Strategie Muster vs Delegierten gemeint, wie in Funktionen / Lambda als Argumente übergeben, dann weiß ich wenigstens dort weniger Aufwand in Bezug auf die Klassen, die für die Teilnehmer zu erstellenden müssen.

Ich fand diese Seite der Suche nach jemandem, den mir ihre Gedanken über die Vorteile zu geben, der nach wie vor gegeben, um das Entwurfsmuster Route mit, dass sowohl Java-8 und C # unterstützen nun als Argument

vorbei
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top