Dieser Artikel beschreibt das Prinzip und die Verwendung des Java -Designmusters. Teilen Sie es für Ihre Referenz wie folgt weiter:
Das Richtlinienmuster definiert eine Reihe von Algorithmen und verkauft jeden Algorithmus, wodurch sie miteinander austauschbar sind. Das Richtlinienmuster ermöglicht es dem Algorithmus, sich unabhängig von den Kunden zu ändern. Unter ihnen verwenden die Treeset -Klasse und die Treemap -Klasse in JDK das politische Muster. Diese beiden Klassen sind sortierte Sammlungsklassen, und die Sortierregeln entsprechen einer Reihe von Algorithmen, die im Richtlinienmuster definiert sind, und die Sammlungsklasse entspricht einer Umgebungsklasse im Richtlinienmuster, die Benutzer verwenden können. Nur zu wissen, dass Treeset und Treemap sortiert sind. Wie die Sortierung betrifft, wird es durch den Sortieralgorithmus bestimmt.
Das Strategiemodell besteht aus drei Teilen: abstrakte politische Rolle, spezifische politische Rolle und Umweltrolle.
Abstrakte politische Rolle : Eine Richtlinienklasse, die normalerweise von einer Schnittstelle oder einer abstrakten Klasse implementiert wird.
Spezifische Strategierolle : Die abstrakte Strategieklasse wird implementiert und verwandte Algorithmen und Verhaltensweisen sind verpackt.
Umweltrolle : Hält einen Hinweis auf eine Richtlinienklasse und wird schließlich dem Kunden gerufen.
Hier ist ein einfaches Beispiel für Richtlinienmustercode:
1.. Abstrakte Strategierolle : Definieren Sie eine Schnittstellenstrategie.
Paket com.test;/** * Strategiemuster Abstract Rolle * @Author Zhouwen * */Public Interface Strategie {public int calculate (int a, int b);}2. Spezifische Strategierolle : Implementieren Sie die Strategieschnittstelle. Im Beispiel wird der Betrieb von Addition, Subtraktion, Multiplikation und Abteilung implementiert.
Paket com.test;/*** Richtlinienmodus Spezifische Strategieklasse* Implementieren Sie Additionsvorgänge* @Author Zhouwen***/öffentliche Klasse addStrategy implementiert Strategie {@Override public int calculate (int a, int b) {return a + b; }} Paket com.test;/*** Richtlinienmodusspezifische Strategieklasse* Subtraktionsvorgang implementieren* @author zhouwen***/public class Subtrategegy implementiert Strategie {@Override public int calculate (int a, int b) {return a - b; }} Paket com.test;/** * Richtlinienmodusspezifische Strategieklasse * Implementieren Sie Multiplikationsoperation * @Author Zhouwen * * */öffentliche Klasse MultiplyStragety -Implementierung Strategie {@Override public int calculate (int a, int b) {return a * b; }} Paket com.test;/*** Richtlinienmodusspezifische Strategieklasse* Implementieren Sie den Abteilungsvorgang* @Author Zhouwen**/öffentliche Klasse Dividestrategy -implementiert Strategie {@Override public int calculate (int a, int b) {return a/b; }}3..
Paket com.test;/** * Umgebungsklasse der Richtlinienmodus * @Author Zhouwen * */öffentliche Klassenumgebung {private Strategiestrategie; öffentliche Umgebung (Strategiestrategie) {this.strategy = Strategie; } // Verwenden Sie die Änderung der Politik public void setstrategy (Strategiestrategie) {this.strategy = Strategie; } öffentliche Strategie getStrategy () {Return Strategy; } // Die Computerschnittstelle für den Client aufdecken, um die öffentliche Int -Berechnung aufzurufen (int a, int b) {return Strategy.Calculate (a, b); }}4. Schreiben Sie schließlich den Client -Code:
Paket com.test; öffentliche Klasse Client {public static void main (String [] args) {addStrategy addStrategy = new addStrategy (); Umweltumgebung = neue Umgebung (addStrategy); System.out.println (Umwelt.Calculate (3, 4)); Subtractrategy substrategy = new Subtratstrategy (); Umwelt.SetStrategy (Substrategie); System.out.println (Umwelt.Calculate (3, 4)); MultiplyStragety Multiplystrategy = new MultiplyStragety (); Umwelt.SetStrategy (Multiplystrategy); System.out.println (Umwelt.Calculate (3, 4)); Dividestrategy dividestrategy = neu dividestrategy (); Umwelt.SetStrategy (Dividestrategy); System.out.println (Umwelt.Calculate (3, 4)); }}Zusammenfassen:
Mit dem Client System.out.println(environment.calculate(3, 4)); In diesem Code wissen wir nicht, welche Implementierungsklasse aufgerufen wird. Nur wenn wir die spezifische politische Klasse kennen, wissen wir, welche Klasse wir anrufen sollten. Dies kann die Trennung des Kunden und des spezifischen Richtlinienalgorithmus erreichen, wodurch das Programm einfach zu wechseln, zu verstehen und zu erweitern ist.
Vor- und Nachteile des Strategiemodells:
Vorteil:
1. Der Zweck des Richtlinienmusters besteht darin, jeden Algorithmus in eine unabhängige Klasse mit einer gemeinsamen Schnittstelle für einen Satz von Algorithmen zu verkapulieren, damit sie durcheinander ersetzt werden können. Wie im Beispiel angegeben, wird die Richtlinie durch die festgelegte Methode ersetzt.
2. Das Richtlinienmuster ermöglicht es dem Algorithmus, sich zu ändern, ohne den Kunden zu beeinflussen. Verwenden Sie Richtlinienmuster, um das Verhalten von der Umgebung zu trennen.
3. Die Umgebungsklasse ist für die Aufrechterhaltung und Abfragen von Verhaltensklassen verantwortlich, und verschiedene Algorithmen sind in spezifischen Strategien bereitgestellt. Da der Algorithmus und die Umgebung unabhängig sind, wirkt sich die Änderung des Algorithmus nicht auf die Umgebung und den Kunden aus.
Mangel:
1. Der Kunde muss alle Richtlinienklassen kennen und entscheiden, welche Richtlinienklasse nach eigenem Ermessen verwendet werden soll.
2. Es wird viele Strategien verursachen.
For more Java-related content, readers who are interested in this site can view the topics: "Introduction and Advanced Tutorial on Java Object-Oriented Programming", "Tutorial on Java Data Structure and Algorithm", "Summary of Java Operation DOM Node Skills", "Summary of Java File and Directory Operation Skills" and "Summary of Java Cache Operation Skills"
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.