Strategiemuster ist eines der Verhaltensmuster unter den 23 Designmustern in Java. Schauen wir uns zunächst an, was Strategiemuster sind.
Definition des Strategiemusters:
Dieses Entwurfsmuster kapselt eine Reihe von Algorithmen, sodass diese untereinander ersetzt werden können und Algorithmusänderungen keinen Einfluss auf die Clientnutzung haben. Das Strategiemuster gehört zum Objektverhaltensmuster. Es kapselt den Algorithmus, trennt die Verantwortung für die Verwendung des Algorithmus von der Implementierung des Algorithmus und delegiert die Verwaltung dieser Algorithmen an verschiedene Objekte.
Tatsächlich stoßen wir im wirklichen Leben oft auf Situationen, in denen wir zwischen mehreren Strategien wählen können, um ein bestimmtes Ziel zu erreichen. Wenn Sie beispielsweise reisen, können Sie ein Flugzeug nehmen, einen Zug nehmen, Fahrrad fahren oder Auto fahren eigenes Privatauto usw. Oder zum Online-Shopping können Sie beispielsweise die Industrial and Commercial Bank of China, die Agricultural Bank of China, die China Construction Bank usw. wählen, aber die von ihnen bereitgestellten Algorithmen sind dieselben, um Ihnen beim Bezahlen zu helfen.
Bei der Softwareentwicklung werden wir auf ähnliche Situationen stoßen. Wenn es mehrere Algorithmen oder Strategien zur Implementierung einer bestimmten Funktion gibt, können wir je nach Umgebung oder Bedingungen unterschiedliche Algorithmen oder Strategien auswählen, um die Funktion auszuführen. 2. Vor- und Nachteile von Strategiemustern Die Algorithmusfamilie kann in der übergeordneten Klasse platziert werden, um Codeduplizierung zu vermeiden und eine Reihe wiederverwendbarer Algorithmen bereitzustellen Vorausgesetzt, dass das Schließungsprinzip perfekt unterstützt wird, können neue Algorithmen flexibel hinzugefügt werden, ohne den ursprünglichen Code zu ändern. Die Verwendung des Algorithmus
wird in der Umgebungsklasse platziert, während die Implementierung des Algorithmus in die spezifische Strategieklasse verschoben wird , die Integration der beiden erkennen
Der Kunde muss die Unterschiede zwischen allen Strategiealgorithmen verstehen, um rechtzeitig die geeignete Algorithmusklasse auswählen zu können
Der Strategiemodus Erstellt viele Strategieklassen und erhöht die Schwierigkeit der Wartung
3. Die Struktur des Strategiemusters: Verschiedene Algorithmen implementieren diese Schnittstelle auf unterschiedliche Weise Rufen Sie verschiedene Algorithmen auf, im Allgemeinen mithilfe von Schnittstellen oder abstrakten Klassen.
3. Umgebungsklasse: enthält einen Verweis auf eine Strategieklasse, die letztendlich vom Client aufgerufen wird.
(hier wird der Strategiemodus verwendet)
public abstract class duck { //鸭子都会叫: public void quack(){ System.out.println("嘎嘎嘎"); } //鸭子的外观,因为都不一样,所以由子类去实现 public abstract void display(); //以下使用策略模式: //在父类中持有该接口,并由该接口代替飞行行为(组合) private Flying flying; //提供set方法 public void setFlying(Flying flying) { this.flying = flying; } public void fly(){ flying.Fly(); } }
Definition Eine fliegende Schnittstelle:
/** * 策略接口:实现了鸭子的飞行行为 */ public interface Flying { void Fly(); }Wir wissen, dass das Strategiemuster darin besteht, den Algorithmus zu kapseln, der verwendet werden muss, und es kapselt die beiden Methoden die fliegen können und
die nicht fliegen kann ein ein weiteres
Paketwird fliegen (von der Flugschnittstelle oben geerbt und die Flugmethode überschreiben):
public class FlyWithWin implements Flying { @Override public void Fly() { System.out.println("我会飞"); } }
Kann nicht fliegen:
public class FlyNoWay implements Flying { @Override public void Fly() { System.out.println("我不会飞行"); } }
Hinweis: Ich kapsele die beiden oben genannten Methoden separat und Behandeln Sie sie als Algorithmenfamilie. Wenn das Programm einen der Algorithmen verwenden muss, ist das Programm von der Algorithmusänderung nicht betroffen, da der endgültige Effekt des Algorithmus derselbe ist.
Kleine Entenklasse (kann nicht fliegen). : ?? Test abgeschlossen***Bei Verwendung der Stockente als Objekt:
/**
* 红色鸭子
*/
public class RedDuck extends duck{
public RedDuck(){
super();
//给鸭子注入飞行的能力,这里就是通过算法族里面的会飞的算法
super.setFlying(new FlyWithWin());
}
@Override
public void display() {
System.out.println("我是红色的鸭子");
}
}
Bei Verwendung der kleinen Ente als Objekt:
Ich bin immer noch dabei eine kleine Entega~ga~ga***Test abgeschlossen***
5. Anwendungsszenarien des Strategiemodus
1. Ein System muss dynamisch sein. Jeder Algorithmus kann in eine Strategieklasse gekapselt werden2 Eine Klasse definiert mehrere Verhaltensweisen, und diese Verhaltensweisen erscheinen in Form mehrerer bedingter Anweisungen in den Operationen dieser Klasse. Jeder bedingte Zweig kann zum Ersetzen in seine eigene Strategieklasse verschoben werden diese bedingten Anweisungen
3. Wenn die Algorithmen im System völlig unabhängig voneinander sind und die Implementierungsdetails des spezifischen Algorithmus vor Kunden verborgen bleiben müssen4. Wenn das System erfordert, dass Kunden, die den Algorithmus verwenden, die Daten, mit denen sie arbeiten, nicht kennen dürfen, kann das Strategiemuster verwendet werden, um die mit dem Algorithmus verbundenen Datenstrukturen auszublenden.
5 Mehrere Klassen unterscheiden sich nur in ihrem Leistungsverhalten Das Strategiemuster kann verwendet werden, um das spezifische Verhalten, das zur Laufzeit ausgeführt werden soll, dynamisch auszuwählen
Das obige ist der detaillierte Inhalt vonSo implementieren Sie das Strategiemuster von Java mithilfe von Code. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!