In diesem Artikel wird die Verwendung des Strategiemodus für Java beschrieben, um das Problem der Einkaufszentren -Werbeprodukte zu lösen. Teilen Sie es für Ihre Referenz wie folgt weiter:
Eine Musterdefinition
Richtlinienmodus: Definieren Sie eine Reihe von Algorithmen, verkapulieren Sie jeden Algorithmus und können Sie austauschbar verwendet werden. Der Richtlinienmodus ermöglicht es dem Algorithmus, sich unabhängig von der Kundenanwendung zu ändern, die sie verwendet.
Beispiele für den zweiten Modus
1 Musteranalyse
Wir leihen uns Mall -Werbeprodukte aus, um dieses Modell zu veranschaulichen.
2 Richtlinienmodus Statische Klassendiagramm
3 Code Beispiele
3.1 Erstellen Sie eine politische Schnittstelle-ISTRATEGY
Paket com.demo.strategy;/** * Richtlinienschnittstelle * * @Author * */public interface istrategy {/** * Methode zur Berechnung des tatsächlichen Preis3,2 20% Rabatt auf Promotion Strategie-Rebatestrategy
Paket com.demo.Strategy;/** * 20% Rabatt auf Produktförderungsstrategie * * @Author * */öffentliche Klasse Rebatestrategy implementiert iStrategy {private endgültige Doppelrate; / *** Construct -Methode Set Abzinsungssatz*/ public Rebatestrategy () {this.rate = 0,8; } / ** * Berechnen Sie die tatsächliche Preismethode * * @param ConsumptionPrice * Konsummenge * @return * / public double realprice (double conssumprice) {return ConsumptionPrice * this.rate; }}3.3 Werbestrategie für 200 Rabatt für über 1000 Yuan, Redcestrategy
Paket com.demo.Strategy;/** * 200 Aus für Einkäufe über 1000 Produktförderungsstrategie * * @Author * */öffentliche Klasse Redcestrategy -Implementierung von IStrategy {/** * Methode zur Berechnung des tatsächlichen Preis } else {return ConsumptionPrice; }}}3,4 20% Rabatt auf Werbestrategie für mehr als 200 Yuan -PromotionalStrategy
Paket com.demo.Strategy;/** * 200 oder mehr, 20% Rabatt für die Produktförderungsstrategie für Teile über 200 * * @Author * */public class Proprotrategy implements istrategy {/** * Methode zur Berechnung des tatsächlichen Preis 200) * 0,8; } else {return ConsumptionPrice; }}}3.5 Erstellen eines Kontextes
Paket com.demo.context; import java.math.bigdecimal; import com.demo.strategy.istrategy;/** * Kontextumgebung * * @author * */public class Context {// aktuelle Richtlinien private iStrategy -Strategie; // Setzen Sie die aktuelle Politik öffentlicher void setstrategy (iStrategy -Strategie) {this.strategy = Strategie; } // Strategie zur Berechnung des Preises Public Double Cul (Double ConsumptionPrice) {// Verwenden Sie eine spezifische Produktförderungsstrategie, um den tatsächlichen Verbrauchsbetrag Double Realprice = this.strategy.realPrice (Verbraucher) zu erhalten; // Format die 1 -Ziffer nach dem Dezimalpunkt, dh genau auf den Winkel Bigdecimal Bd = New BigDecimal (Realprice); bd = bd.setScale (1, bigDecimal.round_down); return bd.doubleValue (); }}3.6 Kundeneinkaufs- und Verbrauchskunde
Paket com.demo; import Java.util.random;/** Client -Anwendung * * @Author * * */public class Client {/** * @param args */public static void main (String [] args) {// eine Instanz des Auf- und Down -Umgebungsobjekts // Context Context = New Context (); // Zufallszahlenobjekt Random Random = new random (); für (int i = 0; i <10; i ++) {// So generieren Sie zufällige Zahlen, welche Werbestrategie int x = random.Nextint (3) verwendet werden; // Der Verbraucherpreis wird auch durch Zufallszahlen generiert (kann nicht 0 sein) Double ConsumptionPrice = 0; while ((ConsumPrice = random.Nextint (2000)) == 0) {} double realprice = ConsumptionPrice; Switch (x) {Fall 0: // 20% Rabatt -Produkte // context.setStrategy (neuer Rebatestrategy ()); RealPrice = Consumptprice * 0,8; brechen; Fall 1: // 20% Rabatt auf Produkte über 200 // context.setStrategy (neue PromotionalStrategy ()); if (konsumiert> 200) {Realprice = 200 + (Verbraucher - 200) * 0,8; } brechen; Fall 2: // 200 Aus für Einkäufe über 1000 // context.setStrategy (neuer Redcestrategy ()); if (konsumiert> = 1000) {realprice = ConsumptionPrice - 200; } brechen; } System.out.print ("【" + (x == 0? "20% Rabatt für Einkäufe über 200": (x == 1? "20% Rabatt für Einkäufe über 1000": "")) + "】 Produkt:"); System.out.println ("Originalpreis:" + Consumptprice + " - Preis nach Rabatt:" + Realprice); }}}4 Auslaufergebnisse
【200 Rabatt für Einkäufe über 1000】 Produkt: Originalpreis: 908,0 - Preis nach Rabatt: 908.0
【200 Rabatt für Einkäufe über 1000】 Produkt: Originalpreis: 1129.0 - Preis nach Rabatt: 929.0
【200 Rabatt für Einkäufe über 1000】 Produkt: Originalpreis: 829.0 - Preis nach Rabatt: 829.0
[20% Rabatt] Produkt: Originalpreis: 518,0 - Preis nach Rabatt: 414.4000000000000003
【200 Rabatt für Einkäufe über 1000】 Produkt: Originalpreis: 1230,0 - Preis nach Rabatt: 1030.0
【20% Rabatt auf】 Produkt: Originalpreis: 106,0 - Preis nach Rabatt: 84.8000000000000001
【200 Rabatt für Einkäufe über 1000】 Produkt: Originalpreis: 1134,0 - Preis nach Rabatt: 934,0
[20% Rabatt für Teile über 200] Produkt: Originalpreis: 664,0 - Preis nach Rabatt: 571,2
【200 Rabatt für Einkäufe über 1000】 Produkt: Originalpreis: 564,0 - Preis nach Rabatt: 564,0
【200 Rabatt für Einkäufe über 1000】 Produkt: Originalpreis: 730,0 - Preis nach Rabatt: 730,0
Drei Prinzipien der Gestaltung dieses Musters
1 "Open-Close" -Prinzip
2 Prinzip der Einzelverantwortung
Vier Nutzungsanlässe
1 Wenn das Leistungsverhalten mehrerer Klassen unterschiedlich ist und es erforderlich ist, das spezifische Ausführungsverhalten zur Laufzeit dynamisch auszuwählen.
2 Es ist notwendig, verschiedene Strategien in verschiedenen Situationen zu verwenden, oder die Strategien können in Zukunft auf andere Weise umgesetzt werden.
3 Wenn es notwendig ist, die Implementierungsdetails spezifischer Strategien zu verbergen, ist jede spezifische Strategie unabhängig voneinander.
4 Wenn in einer Klasse mehrere Verhaltensweisen auftreten und in einer Operation mehrere bedingte Zweige verwendet werden, um die Verwendung mehrerer Verhaltensweisen zu beurteilen, kann das Richtlinienmuster verwendet werden, um die Aktionen jeder bedingten Zweigstelle in eine bestimmte Strategie zu implantieren.
Statisches Klassendiagramm für Fünf-Strategie-Modus
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.