Heim  >  Artikel  >  Java  >  Erlernen des Strategiemusters in Java

Erlernen des Strategiemusters in Java

黄舟
黄舟Original
2017-10-13 10:16:461260Durchsuche

Dieser Artikel bietet Ihnen hauptsächlich eine detaillierte Einführung in die relevanten Informationen zum Strategiemuster beim Lernen von Java-Designmustern. Interessierte Freunde können sich auf

Strategiemuster beziehen ist eine Methode zum Definieren einer Reihe von Algorithmen. Die von den Algorithmen geleistete Arbeit ist jedoch unterschiedlich. Sie kann alle Algorithmen auf die gleiche Weise aufrufen, wodurch die Kopplung zwischen verschiedenen Algorithmusklassen und die Verwendung von Algorithmusklassen verringert werden.

Java implementiert ein Strategiemodell:

Anforderungen: Einkaufszentrum-Kassierersystem, die Kassierermethode ist normales Laden, 20 % Rabatt und 100 zurück für Einkäufe über 300, diese drei Lademethoden.

1: Erstellen Sie eine Superklasse. Das heißt, die abstrakte Methode des Ladens.


public abstract class CashSuper {
  public abstract double acceptCash(double money);
}

2: Erstellen Sie eine Klasse, die diese Superklasse implementiert.


public class CashNormal extends CashSuper {
 
  @Override
  public double acceptCash(double money) {
    return money;
  }
 
}

3: Erstellen Sie spezifische Implementierungsalgorithmusklassen für drei Lademethoden entsprechend unterschiedlicher Lademethoden in Einkaufszentren


/**打折子类
 * 获取打折折扣,使用应付金额乘以折扣
 * @author 我不是张英俊
 *
 */
public class CashRebate extends CashSuper {

  private double moneyRebate=1;
  
  public CashRebate(String moneyRebate){
    this.moneyRebate=Double.parseDouble(moneyRebate);
  }
  @Override
  public double acceptCash(double money) {
    
    
    return money*moneyRebate;
  }

}


/**返利收费子类,例如,满三百减一百
 * @author 我不是张英俊
 *
 */
public class CashReturn extends CashSuper {

  /**
   * 返利收费,初始化时必须要输入返利条件和返利值,比如慢300时返100,
   * 则moneyCondition为300,moneyRetrun 为100
   */
  private double moneyCondition=0;
  private double moneyReturn=0;
  
  public CashReturn(String moneyCondition,String moneyReturn){
    this.moneyCondition=Double.parseDouble(moneyCondition);
    this.moneyReturn=Double.parseDouble(moneyReturn);
  }
  
  
  @Override
  public double acceptCash(double money) {
    
    double result=money;
    if(money>=moneyCondition){
      result=money-Math.floor(money/moneyCondition)*moneyReturn;
    }
    
    return result;
  }

}


/**
 *正常收费的,原价返回
 * @author 我不是张英俊
 *
 */
public class CashNormal extends CashSuper {

  @Override
  public double acceptCash(double money) {
    return money;
  }

}

4: Schreiben Sie einen Kontext, um verschiedene Zahlungsmethoden über dieselbe Methode zu implementieren. Da unterschiedliche Objekte erstellt werden müssen, muss dies in Verbindung mit dem einfachen Factory-Muster implementiert werden.


public class CashContext {

  private CashSuper cs=null;
  
  public CashContext(String type){
    switch (type) {
    case "正常收费":
      CashNormal cs0=new CashNormal();
      cs=cs0;
      break;
    case "满300返100":
      CashReturn cr1=new CashReturn("300", "100");
      cs=cr1;
      break;
    case "打八折":
      CashRebate cr2=new CashRebate("0.8");
      cs=cr2;
      break;
      
    }
  }
  
  public double GetResult(double money){
    return cs.acceptCash(money);
  }
  
}

5: Testklasse


public class Test {

  public static void main(String[] args) {
    
    double a=new CashContext("打八折").GetResult(300);
    System.out.println(a);
    double b=new CashContext("正常收费").GetResult(300);
    System.out.println(b);
    double c=new CashContext("满300返100").GetResult(300);
    System.out.println(c);
  }

}

6: Konsole.

240,0
300,0
200,0

Zusammenfassung: Strategiemuster vereinfacht Unit-Tests, da jeder Algorithmus eine eigene Klasse ist und einzeln über seine eigene Schnittstelle getestet werden kann.

Das Strategiemuster wird zum Kapseln von Algorithmen verwendet, kann aber im tatsächlichen Gebrauch zum Kapseln jeder Art von Regeln verwendet werden, solange Sie hören, dass während der Analyse zu unterschiedlichen Zeitpunkten unterschiedliche Geschäftsregeln angewendet werden müssen Prozess können Sie die Möglichkeit in Betracht ziehen, das Strategiemuster zur Bewältigung dieser Änderung zu verwenden.

Meine eigene Überlegung: Im Allgemeinen kapselt das Strategiemuster den Algorithmus, z. B. Kung Fu Panda. Nach dem Erben der Tier-Superklasse müssen sowohl die Sprachfunktion als auch die Kung-Fu-Funktion implementiert werden trennen verschiedene Algorithmen und lassen sich bei der Verwendung gut kombinieren.

Das obige ist der detaillierte Inhalt vonErlernen des Strategiemusters in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn