Cet article décrit l'utilisation du mode stratégie pour Java pour résoudre le problème des produits promotionnels du centre commercial. Partagez-le pour votre référence, comme suit:
Une définition de modèle
Mode politique: définir une série d'algorithmes, encapsuler chaque algorithme et peut être utilisé de manière interchangeable, et le mode politique permet à l'algorithme de changer indépendamment de l'application client qui l'utilise.
Exemples du deuxième mode
1 analyse de modèle
Nous empruntons les produits promotionnels du centre commercial pour illustrer ce modèle.
2 Diagramme de classe statique du mode politique
3 exemples de code
3.1 Créer une interface de stratégie-ISTRATRATY
package com.demo.strategy; / ** * Interface politique * * @author * * / interface publique Istrategy {/ ** * Méthode de calcul du prix réel * * @param ConsumptionPrice * Montant de consommation * @return * / public DoublePrice (double consommation de consommation);}3,2 20% de réduction sur la stratégie de promotion-rebatestrategy
package com.demo.strategy; / ** * 20% de réduction sur la stratégie de promotion du produit * * @author * * / classe publique Rebatestrategy implémente istrategy {Taux double final privé; / ** * Construire le taux de réduction de la méthode de la méthode * / public Rebatestrategy () {this.rate = 0,8; } / ** * Calculer la méthode des prix réels * * @param ConsumptionPrice * Montant de consommation * @return * / public double realPrice (double consommationprice) {return ConsumptionPrice * this.rate; }}3.3 Stratégie promotionnelle pour 200 réductions pour plus de 1000 yuans, réducestrategy
Package com.demo.strategy; / ** * 200 Off pour les achats de plus de 1000 stratégie de promotion de produits * * @author * * / classe publique Reducestrategy implémente le montant de la consommation * @return * / public Double RealPrice (DoublePresprice) {if (ConsumePrice> = 1000) {Return Consomption - 200; } else {return ConsumptionPrice; }}}3,4 20% de réduction sur la stratégie promotionnelle pour plus de 200 yuans PromotionalStrategy
Package com.demo.strategy; / ** * 200 ou plus, 20% de réduction pour la stratégie de promotion des produits pour les pièces supérieures à 200 * * @Author * * / classe publique PromotionAlStrategy implémente le montant de la consommation * {** * Méthode pour calculer le prix réel * * @param ConsumptionPrice - 200) * 0,8; } else {return ConsumptionPrice; }}}3.5 Création d'un contexte
package com.demo.context; import java.math.bigdecimal; import com.demo.strategy.istrategy; / ** * Environnement de contexte * * @author * * / public class context {// stratégie actuelle de stratégie Privatesty; // Définir la politique actuelle publique void setStrategy (stratégie istrategy) {this.strategy = stratégie; } // Utiliser la stratégie pour calculer le prix Public Double Cul (double consommation de consommation) {// Utiliser une stratégie de promotion de produits spécifique pour obtenir le montant de la consommation réel Double RealPrice = this.Strategy.realPrice (consommation de consommation); // Formatez le 1 chiffre après le point décimal, c'est-à-dire précisément à l'angle BigDecimal BD = nouveau BigDecimal (RealPrice); bd = bd.setscale (1, bigdecimal.round_down); retour bd.doubleValue (); }}3.6 Client des achats et de la consommation des consommateurs
package com.demo; import java.util.random; / ** * application client * * @author * * / classe publique Client {/ ** * @param args * / public static void main (String [] args) {// Créer une instance de l'objet d'environnement de haut en bas // Contexte contextuel = nouveau contexte (); // objet de nombre aléatoire Random Random = new Random (); pour (int i = 0; i <10; i ++) {// comment générer des nombres aléatoires déterminez la stratégie de promotion à utiliser int x = random.nextint (3); // Le prix de la consommation est également généré par des nombres aléatoires (ne peut pas être 0) double consommation de consommation = 0; while ((consommation de consommation = random.Nextint (2000)) == 0) {} double realPrice = ConsomptionPrice; commutateur (x) {cas 0: // 20% de réduction sur les produits // context.setstrategy (new Rebatestrategy ()); RealPrice = ConsumptionPrice * 0,8; casser; Cas 1: // 20% de réduction sur les produits supérieurs à 200 // context.SetStrategy (new PromotionalStrategy ()); if (consommation de consommation> 200) {realPrice = 200 + (consommation de consommation - 200) * 0,8; } casser; Cas 2: // 200 Off pour les achats de plus de 1000 // context.SetStrategy (new Reducestrategy ()); if (consommation de consommation> = 1000) {realPrice = ConsumptionPrice - 200; } casser; } System.out.print ("【" + (x == 0? "20% de réduction pour les achats de plus de 200": (x == 1? "20% de réduction pour les achats de plus de 1000": ""))) + "】 Produit:"); System.out.println ("Prix d'origine:" + ConsomptionPrice + "- Prix après remise:" + RealPrice); }}}4 Résultats en cours d'exécution
【200 Off pour les achats de plus de 1000】 Produit: Prix d'origine: 908.0 - Prix après remise: 908.0
【200 Off pour les achats de plus de 1000】 Produit: Prix d'origine: 1129.0 - Prix après réduction: 929.0
【200 Off pour les achats de plus de 1000】 Produit: Prix d'origine: 829.0 - Prix après réduction: 829.0
[20% de réduction] Produit: Prix d'origine: 518.0 - Prix après réduction: 414.4000000000000003
【200 Off pour les achats de plus de 1000】 Produit: Prix d'origine: 1230.0 - Prix après réduction: 1030.0
【20% de réduction】 Produit: Prix d'origine: 106,0 - Prix après réduction: 84.8000000000000001
【200 Off pour les achats de plus de 1000】 Produit: Prix d'origine: 1134,0 - Prix après remise: 934.0
[20% de réduction pour les pièces supérieures à 200] Produit: Prix d'origine: 664,0 - Prix après réduction: 571.2
【200 Off pour les achats de plus de 1000】 Produit: Prix d'origine: 564,0 - Prix après réduction: 564.0
【200 Off pour les achats de plus de 1000】 Produit: Prix d'origine: 730.0 - Prix après réduction: 730.0
Trois principes de conception de ce modèle
1 principe "de clôture ouverte"
2 principe de responsabilité unique
Quatre occasions d'utilisation
1 Lorsque les comportements de performance de plusieurs classes sont différents, et il est nécessaire de sélectionner dynamiquement le comportement d'exécution spécifique au moment de l'exécution.
2 Il est nécessaire d'utiliser différentes stratégies dans différentes situations, ou les stratégies peuvent être mises en œuvre de d'autres manières à l'avenir.
3 Lorsqu'il est nécessaire de masquer les détails de mise en œuvre de stratégies spécifiques, chaque stratégie spécifique est indépendante les unes des autres.
4 Lorsque plusieurs comportements se produisent dans une classe et que plusieurs branches conditionnelles sont utilisées dans une opération pour juger de l'utilisation de comportements multiples, le modèle de politique peut être utilisé pour implanter les actions de chaque branche conditionnelle dans une stratégie spécifique.
Diagramme de classe statique du mode à cinq stratégie
Pour plus de contenu lié à Java, les lecteurs qui sont intéressés par ce site peuvent afficher les sujets: "Introduction et tutoriel avancé sur la programmation Java Oriented Oriented", "Tutorial sur la structure de données Java et l'algorithme", "Résumé des compétences de l'opération Java Dom Dom", "Résumé des compétences de l'opération Java et de l'opération de répertoire" et "Résumé de Java Cache Skills"
J'espère que cet article sera utile à la programmation Java de tous.