Die Beispiele in diesem Artikel teilen Ihnen das Java -Strategiemodell für Ihre Referenz. Der spezifische Inhalt ist wie folgt
1. Strategiemuster ist ein relativ einfaches Modell, das auch als Richtlinienmuster bezeichnet wird.
Die Definition ist wie folgt:
Definieren Sie eine Familie von Algorithmen, verkapseln Sie sie und machen Sie sie austauschbar.
(Definieren Sie einen Satz von Algorithmen, verkapulieren Sie jeden Algorithmus und machen Sie sie austauschbar.)
Das allgemeine Klassendiagramm des politischen Musters lautet wie folgt:
Drei Rollen des politischen Modells:
● Die Kontextkapselungsrolle, auch als Kontextrolle bezeichnet, spielt eine Rolle der Kapselung, die die Vergangenheit und die Zukunft verbindet, den direkten Zugang von Modulen auf hoher Ebene mit Richtlinien und Algorithmen blockiert und mögliche Änderungen enthält.
● Strategie abstrakte Strategie Rollenstrategie und Algorithmusfamilienabstraktion, normalerweise eine Schnittstelle, definiert die Methoden und Attribute, die jede Strategie oder jeder Algorithmus haben muss.
● Konkrete Strategie Die spezifische Strategierolle implementiert Operationen in abstrakten Richtlinien, und diese Klasse enthält spezifische Algorithmen.
Das politische Muster besteht darin, eine bestimmte Richtlinie im Konstruktor der eingekapselten Rolle zu verabschieden und dann diese Richtlinie auszuführen.
Der allgemeine Quellcode des Richtlinienmodus lautet wie folgt:
public class test3 {public static void main (String [] args) {// eine spezifische Strategiestrategie deklarieren = new Concretestrategy1 (); // den Kontext -Objekt -Kontext Kontext = neuer Kontext (Strategie) deklarieren; // den eingekapselten Methodenkontext ausführen. DoanyThinig (); }} Schnittstellenstrategie {// Arithmetische Regeln des Politikmodus public void doSomething (); } Klasse Concretestrategy1 implementiert Strategie {public void dosomething () {System.out.println ("Arithmetische Regeln für bestimmte Strategie 1"); }} Klasse Concretestrategy2 implementiert Strategie {public void dosomething () {System.out.println ("Arithmetische Regeln für bestimmte Strategie 2"); }} Klassenkontext {// Abstract Strategy Private Strategy Strategy; // Konstruktor legt spezifische Strategien öffentlicher Kontext fest (Strategie _strategy) {this.strategy = _strategy; } // Inkapselte Strategiemethode public void doythinig () {this.strategy.dosomething (); }}Vorteile des Strategiemodells:
● Der Algorithmus kann frei umgeschaltet werden
Dies wird durch das politische Modell selbst definiert. Solange die abstrakte Strategie implementiert ist, wird sie Mitglied der politischen Familie, wodurch sie durch Verkapselungsrollen zusammenfasst und sichergestellt wird, dass die Strategie der "frei schaltrigen" der Außenwelt bereitgestellt wird.
● Vermeiden Sie es, mehrere Bedingungen zu verwenden, um zu beurteilen
Wenn es kein politisches Modell gibt, lassen Sie uns darüber nachdenken, wie es aussehen würde? Eine Strategiefamilie hat 5 Strategiealgorithmen. Sie müssen Strategie A zu einem bestimmten Zeitpunkt anwenden und dann Strategie a irgendwann A anwenden.
Wie gestaltete ich Strategie B? Mehrere bedingte Aussagen verwenden? Multi-konditionelle Aussagen sind nicht einfach zu warten, und die Wahrscheinlichkeit von Fehlern wird erheblich verbessert. Nach der Verwendung des Richtlinienmodus können andere Module entscheiden, welche Strategie eingehen soll. Die von der Richtlinienfamilie bereitgestellte Zugriffsschnittstelle, die außen bereitet, ist die Kapselungsklasse, die den Betrieb vereinfacht und das Urteilsvermögen des bedingten Erklärung vermeidet.
● Gute Skalierbarkeit
Dies muss nicht einmal sagen, was es zu tun hat, weil es zu offensichtlich ist. Es ist zu einfach, dem vorhandenen System eine Strategie hinzuzufügen. Implementieren Sie einfach die Schnittstelle und es besteht keine Notwendigkeit, etwas anderes zu ändern. Es ähnelt einem Plug-In, das wiederholt zerlegt werden kann, was dem OCP-Prinzip stark entspricht.
Nachteile von politischen Mustern:
● Die Anzahl der politischen Klassen steigt. Jede Strategie ist eine Klasse, und die Möglichkeit der Wiederverwendung ist sehr gering und die Anzahl der Klassen steigt.
● Alle Strategieklassen müssen exponiert werden
Verwenden Sie Szenarien für den Richtlinienmodus:
● Mehrere Klassen haben nur geringfügige Szenarien in Algorithmen oder Verhaltensweisen.
● Szenarien, in denen der Algorithmus frei umgestellt werden muss.
● Szenarien, in denen Algorithmusregeln blockiert werden müssen.
2. Erweiterung des Richtlinienmodus - Richtlinienaufzählung
Die politische Aufzählung ist wie folgt definiert:
● Es ist eine Aufzählung.
● Es handelt sich um eine Aufzählung konzentrierter Strategiemuster.
Beispiele sind wie folgt:
Frage: Geben Sie 3 Parameter ein und führen Sie Additions- und Subtraktionsvorgänge aus. Zwei der Parameter sind Int -Typen, und der verbleibende Parameter ist der String -Typ. Es können nur zwei Symbole "+" und "-" ausgewählt werden. Betrachten Sie keine komplexe Überprüfung. Was wir tun, ist ein weißer Box -Test, und was wir eingeben, ist der Standard -Int -Typ und den konformen String -Typ.
Import Java.util.Arrays; public class test3 {public static void main (String [] args) {// Die beiden eingegebenen Parameter sind die Nummer int a = Integer.ParseInt (args [0]); String symbol = args [1]; // das Symbol int b = Integer.ParseInt (args [2]); System.out.println ("Der Eingabeparameter ist:"+arrays.toString (args)); System.out.println ("Das laufende Ergebnis ist:"+a+symbol+b+"="+rechner.add.exec (a, b)); }} Enum -Rechner {// Operation add add ("+") {public int exec (int a, int b) {return a+b; }}, // Subtraktionsoperation sub (" -") {public int exec (int a, int b) {return a - b; }}; String value = ""; // Element Value Type Private Calculator (String _Value) {this.Value = _Value; } // Erhalten Sie den Wert der Aufzählungsmitglieder public String getValue () {return this.value; } // eine abstrakte Funktion public abstract int exec (int a, int b) deklarieren; }Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.