Strategie-Muster

In der Computerprogrammierung sind das Strategie-Muster (auch bekannt als das Politikmuster) ein besonderes Softwaredesignmuster, wodurch Algorithmen an der Durchlaufzeit ausgewählt werden können. Formell sprechend, definiert das Strategie-Muster eine Familie von Algorithmen, fasst jeden kurz zusammen, und macht sie austauschbar. Strategie lässt sich den Algorithmus unabhängig von Kunden ändern, die es verwenden.

Zum Beispiel kann eine Klasse, die Gültigkeitserklärung auf eingehenden Daten durchführt, ein Strategie-Muster verwenden, um einen Gültigkeitserklärungsalgorithmus auszuwählen, der auf dem Typ von Daten, der Quelle der Daten, Benutzerwahl und/oder anderen Differenzialfaktoren gestützt ist. Diese Faktoren sind für jeden Fall bis zur Durchlaufzeit nicht bekannt und können verlangen, dass radikal verschiedene Gültigkeitserklärung durchgeführt wird. Die Gültigkeitserklärungsstrategien, kurz zusammengefasst getrennt vom Bestätigungsgegenstand, können durch andere Bestätigungsgegenstände in verschiedenen Gebieten des Systems (oder der sogar verschiedenen Systeme) ohne Codeverdoppelung verwendet werden.

Die wesentliche Voraussetzung auf der Programmiersprache ist die Fähigkeit, eine Verweisung auf einen Code in einer Datenstruktur zu versorgen und es wiederzubekommen. Das kann durch Mechanismen wie der heimische Funktionszeigestock, die erstklassige Funktion, die Klassen oder die Klassenbeispiele auf objektorientierten Programmiersprachen oder das Zugreifen auf die innere Lagerung der Durchführung der Sprache des Codes über das Nachdenken erreicht werden.

Struktur

(Legende)]]

Beispiel

Das folgende Beispiel ist in Java.

//Die Klassen, die eine konkrete Strategie durchführen, sollten das durchführen.

//Die Zusammenhang-Klasse verwendet das, um die konkrete Strategie zu nennen.

verbinden Sie Strategie {\

interne Nummer führt (interne Nummer a, interne Nummer b) durch;

}\

//Führt den Algorithmus mit dem Strategie Schnittstelle durch

Klasse ConcreteStrategyAdd führt Strategie {\durch

öffentliche interne Nummer führt (interne Nummer a, interne Nummer b) {\durch

System.out.println ("Genannt ConcreteStrategyAdd führen ") durch;

kehren Sie + b zurück;//Tun eine Hinzufügung mit a und b

}\}\

Klasse ConcreteStrategySubtract führt Strategie {\durch

öffentliche interne Nummer führt (interne Nummer a, interne Nummer b) {\durch

System.out.println ("Genannt ConcreteStrategySubtract führen ") durch;

kehren Sie - b zurück;//Tun eine Subtraktion mit a und b

}\}\

Klasse ConcreteStrategyMultiply führt Strategie {\durch

öffentliche interne Nummer führt (interne Nummer a, interne Nummer b) {\durch

System.out.println ("Genannt ConcreteStrategyMultiply führen ") durch;

kehren Sie * b zurück;//Tun eine Multiplikation mit a und b

}

}\

//Konfiguriert mit ConcreteStrategy protestieren, und erhält eine Verweisung auf einen Strategie Gegenstand aufrecht

Klassenzusammenhang {\

private Strategie-Strategie;

//Konstrukteur

öffentlicher Zusammenhang (Strategie-Strategie) {\

this.strategy = Strategie;

}\

öffentliche interne Nummer executeStrategy (interne Nummer a, interne Nummer b) {\

geben Sie strategy.execute (a, b) zurück;

}\}\

//Testanwendung

Klasse StrategyExample {\

öffentliche statische leere Hauptsache (Schnur [] args) {\

Zusammenhang-Zusammenhang;

//Drei Zusammenhänge im Anschluss an verschiedene Strategien

Zusammenhang = neuer Zusammenhang (neuer ConcreteStrategyAdd );

interne Nummer resultA = context.executeStrategy (3,4);

Zusammenhang = neuer Zusammenhang (neuer ConcreteStrategySubtract );

interne Nummer resultB = context.executeStrategy (3,4);

Zusammenhang = neuer Zusammenhang (neuer ConcreteStrategyMultiply );

interne Nummer resultC = context.executeStrategy (3,4);

}\}\</Quelle>

Strategie gegen die Brücke

Das UML Klassendiagramm für das Strategie-Muster ist dasselbe als das Diagramm für das Brücke-Muster. Jedoch sind diese zwei Designmuster nicht dasselbe in ihrer Absicht. Während das Strategie-Muster für das Verhalten gemeint wird, wird das Brücke-Muster für die Struktur gemeint.

Die Kopplung zwischen dem Zusammenhang und den Strategien ist dichter als die Kopplung zwischen der Abstraktion und der Durchführung im Brücke-Muster.

Strategie und öffnet Grundsatz/schließt

Gemäß dem Strategie-Muster sollten die Handlungsweisen einer Klasse nicht geerbt werden, stattdessen sollten sie mit Schnittstellen kurz zusammengefasst werden. Als ein Beispiel, denken Sie eine Autoklasse. Zwei mögliche Funktionalitäten für das Auto sind Bremse und beschleunigen sich.

Seitdem beschleunigen und bremsen Verhaltensänderung oft zwischen Modellen, eine einheitliche Methode soll diese Handlungsweisen in Unterklassen durchführen. Diese Annäherung hat bedeutende Nachteile: Beschleunigen Sie und bremsen Sie Handlungsweisen muss in jedem neuen Automodell erklärt werden. Die Arbeit, diese Verhaltenszunahmen außerordentlich als die Zahl von Musterzunahmen zu führen, und verlangt, dass Code über Modelle kopiert wird. Zusätzlich ist es nicht leicht, die genaue Natur des Verhaltens für jedes Modell zu bestimmen, ohne den Code in jedem zu untersuchen.

Das Strategie-Muster verwendet Ansammlung statt des Erbes. In der Strategie werden Muster-Handlungsweisen als getrennte Schnittstellen und spezifische Klassen definiert, die diese Schnittstellen durchführen. Spezifische Klassen fassen diese Schnittstellen kurz zusammen. Das erlaubt besseres Entkoppeln zwischen dem Verhalten und der Klasse, die das Verhalten verwendet. Das Verhalten kann geändert werden, ohne die Klassen zu brechen, die es verwenden, und die Klassen zwischen Handlungsweisen durch das Ändern der spezifischen Durchführung umschalten können, die verwendet ist, ohne irgendwelche bedeutenden Codeänderungen zu verlangen. Handlungsweisen können auch an der Durchlaufzeit sowie am designmaligen geändert werden. Zum Beispiel kann ein Autogegenstand-Bremse-Verhalten von zu durch das Ändern des Mitgliedes geändert werden zu:

brakeBehavior = neue Bremse ;

</Quelle>

Das gibt größere Flexibilität im Design und ist in der Harmonie mit dem Öffnen/schließen Grundsatz (OCP), der feststellt, dass Klassen für die Erweiterung offen, aber für die Modifizierung geschlossen sein sollten.

Siehe auch

  • Höherwertige Funktion
Mixin
  • Politikbasiertes Design
  • Die Liste der objektorientierten Programmierung nennt

Links


Staatsmuster / Schablone-Methode-Muster
Impressum & Datenschutz