0

Gang of Four fasst den Unterschied zwischen Vorlage up Methode und Strategie wie folgt:Mit Template-Methode und Strategie zusammen

Template Methoden Vererbung Teil eines Algorithmus variieren. Strategien verwenden Delegierung, um den gesamten Algorithmus zu variieren.

Was sind die Szenarien, in denen zwei Designs kombiniert gerechtfertigt wäre und wie ihre Beziehung aussehen würde?

Trivial Beispiel würde Delegieren an Strategie innerhalb Hook-Methoden einer Template-Methode beinhalten, aber ich kann nicht denken, eine gute Begründung für ein solches Design. Darüber hinaus könnte man anstatt an die Unterklasse delegieren, direkt an die Strategie delegieren. Aber ohne Vererbung können wir überhaupt nicht über die Template-Methode sprechen.

+1

Ich denke, diese Frage ist zu weit gefasst, um eine korrekte oder falsche Antwort zu haben. – jaco0646

+0

Es gibt viele Fragen zu Entwurfsmustern auf Stack. Die meisten von ihnen fragen nach Unterschieden und Szenarien, in denen eine Auswahl zwischen verschiedenen Mustern getroffen werden muss. Ich frage nach einem Beispiel, wo sie miteinander kombiniert werden können. Ich denke, das ist eine ziemlich präzise Anfrage. – Siegmeyer

+0

Sie erwähnen, dass es ein triviales Beispiel wäre, die Strategie innerhalb von Hook-Methoden einer Template-Methode zu delegieren und meine Antwort wäre, was damit nicht stimmt. Zur Rechtfertigung der Kombination wird die richtige Verwendung von Mustern durch den Kontext bestimmt, in dem sie verwendet werden. Da es keinen Zusammenhang in der Frage gibt, wäre jede Antwort hypothetisch: hypothetisch sehe ich nichts falsch mit der Kombination der beiden Muster zusammen –

Antwort

2

Ich denke, dass es perfekt möglich ist, beide Muster zu kombinieren.

Sie verwenden das Strategie-Muster, wenn Sie ein bestimmtes Verhalten zur Laufzeit ändern möchten, indem Sie einfach die Instanz der Strategie ändern.

enter image description here

Das heißt, können Sie das Verhalten der Instanzen von „Kontext“ ändern, indem Sie „Strategie“ auf eine andere konkrete Strategie Klasse zuweisen. Es bietet die gleiche Funktionalität als ein Feld, das Sie ändern können und eine Kette von Wenn/Elsen oder einen Schalter basierend auf dem Inhalt dieses Feldes. Das Strategie-Muster ist einfach eine raffiniertere Art, bedingte zu tun. Der Vorteil der Verwendung der Strategie gegenüber einer fest codierten Bedingung besteht darin, dass Sie mehr Bedingungen hinzufügen können, indem Sie neue Klassen hinzufügen, ohne vorhandene ändern zu müssen (das "O" im "SOLID" -Prinzip).

Die Vorlagenmethode hingegen definiert einen Algorithmus, der einige "Haken" offen gelassen hat, die von der konkreten Klasse überschrieben werden müssen.

enter image description here

Beide Muster sind über einen Algorithmus, der von zwei verschiedenen Blickwinkeln: Strategie über die Fähigkeit, einen Algorithmus zur Laufzeit des Austauschens und Template-Methode über die Struktur eines Algorithmus flexibilisierende. Ich verstehe nicht, warum du beides nicht kombinieren kannst. Für mich ist es durchaus möglich, eine Strategie zu haben, die als Template-Methode definiert ist.

+0

Ich dachte nicht über die Verwendung von Strategie, die eine Template-Methode ist. Das macht eigentlich Sinn. Ich war auf der Idee, sie mechanisch zu kombinieren, denke ich. – Siegmeyer