Maison >Java >javaDidacticiel >Apprendre le modèle de stratégie en Java

Apprendre le modèle de stratégie en Java

黄舟
黄舟original
2017-10-13 10:16:461361parcourir

Cet article vous fournit principalement une introduction détaillée aux informations pertinentes sur le modèle de stratégie dans l'apprentissage des modèles de conception Java. Il a une certaine valeur de référence. Les amis intéressés peuvent se référer à

Modèle de stratégie : Le modèle de stratégie. est une méthode de définition d'une série d'algorithmes. Le travail effectué par les algorithmes est le même, mais l'implémentation est différente. Il peut appeler tous les algorithmes de la même manière, réduisant ainsi le couplage entre les différentes classes d'algorithmes et l'utilisation des classes d'algorithmes.

Java met en œuvre un modèle de stratégie :

Exigences : système de caisse du centre commercial, la méthode de caisse est une facturation normale, 20 % de réduction et 100 remises pour les achats supérieurs à 300, ces trois méthodes de facturation.

1 : Créer une super classe. C’est-à-dire la méthode abstraite de facturation.


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

2 : Créez une classe qui implémente cette superclasse.


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

3 : Créer des classes d'algorithmes d'implémentation spécifiques pour trois méthodes de facturation en fonction des différentes méthodes de facturation dans les centres commerciaux


/**打折子类
 * 获取打折折扣,使用应付金额乘以折扣
 * @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 : Écrivez un contexte pour mettre en œuvre différents modes de paiement via la même méthode. Étant donné que différents objets doivent être créés, ils doivent être implémentés en conjonction avec le modèle d'usine simple.


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 : Classe de test


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 : Console.

240.0
300.0
200.0

Résumé : le modèle de stratégie simplifie les tests unitaires car chaque algorithme est sa propre classe et peut être testé individuellement via sa propre interface.

Le modèle de stratégie est utilisé pour encapsuler des algorithmes, mais dans la réalité, il peut être utilisé pour encapsuler tout type de règles, à condition que vous entendiez que différentes règles métier doivent être appliquées à différents moments de l'analyse. process , vous pouvez envisager la possibilité d'utiliser le modèle de stratégie pour gérer ce changement.

Ma propre réflexion : d'une manière générale, le modèle de stratégie encapsule l'algorithme, comme Kung Fu Panda, après avoir hérité de la super classe d'animaux, il doit implémenter à la fois la fonction de langage et la fonction de kung-fu. Les modes séparent différents algorithmes et peuvent être bien combinés lorsqu'ils sont utilisés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn