Le modèle de stratégie est un modèle de conception comportementale qui définit une série d'algorithmes et encapsule chaque algorithme afin qu'ils puissent être remplacés par l'autre. Cela garantit que les modifications de l'algorithme n'affectent pas le client à l'aide de l'algorithme.
Dans le développement de logiciels, les développeurs doivent souvent choisir différents algorithmes selon différentes conditions pour résoudre le problème. Si vous écrivez tous les algorithmes directement dans le code, il peut rendre le complexe de code et difficile à maintenir. Le modèle de politique améliore la maintenabilité et l'évolutivité du code en encapsulant l'algorithme en différentes politiques, indépendamment des changements de client.
Un modèle de stratégie est généralement composé de trois rôles principaux:
Supposons que vous développez une plate-forme de commerce électronique et que vous devez calculer le prix de réduction du produit en fonction du niveau d'adhésion. Différents niveaux d'adhésion correspondent à différents algorithmes de réduction.
Tout d'abord, nous devons définir une classe de stratégie abstraite qui représente des algorithmes de réduction pour différents niveaux d'adhésion.
interface DiscountStrategy {
public function calculate($price);
}
Ensuite, définissez plusieurs classes de stratégie spécifiques pour implémenter différents algorithmes de réduction. Par exemple, l'algorithme de réduction pour les membres ordinaires et les membres VIP:
class RegularMemberDiscount implements DiscountStrategy {
public function calculate($price) {
// Calcul des réductions pour les membres ordinaires
$discountedPrice = $price * 0.9;
echo "Prix réduit pour les membres ordinaires:" . $discountedPrice . "\n";
}
}
class VIPMemberDiscount implements DiscountStrategy {
public function calculate($price) {
// VIPCalcul de réduction des membres
$discountedPrice = $price * 0.8;
echo "VIPPrix de réduction des membres:" . $discountedPrice . "\n";
}
}
Ensuite, nous devons définir une classe d'environnement pour calculer les remises en fonction de l'objet politique actuel:
class DiscountCalculator {
private $strategy;
public function __construct(DiscountStrategy $strategy) {
$this->strategy = $strategy;
}
public function calculateDiscount($price) {
$this->strategy->calculate($price);
}
}
En utilisant le modèle de stratégie, nous pouvons facilement calculer les prix de réduction en fonction des différents niveaux d'adhésion:
$price = 100.0;
$regularMemberDiscount = new RegularMemberDiscount();
$vipMemberDiscount = new VIPMemberDiscount();
$calculator = new DiscountCalculator($regularMemberDiscount);
$calculator->calculateDiscount($price);
$calculator = new DiscountCalculator($vipMemberDiscount);
$calculator->calculateDiscount($price);
Le modèle de stratégie est un modèle de conception couramment utilisé, en particulier adapté aux scénarios où les algorithmes doivent être sélectionnés de manière flexible selon différentes situations. Grâce à des modèles de politique, les algorithmes sont encapsulés en classes de stratégie indépendantes, afin qu'elles puissent être remplacées dynamiquement, ce qui améliore non seulement la maintenabilité du système, mais facilite également l'introduction de nouveaux algorithmes.
Dans l'exemple de cet article, nous découpons avec succès l'algorithme du client par la conception de classes de stratégie abstraites et de classes de stratégie spécifiques. De cette façon, lors de l'ajout de nouveaux niveaux d'adhésion ou de la modification des algorithmes de réduction à l'avenir, l'impact sur le code client peut être évité et la réutilisabilité et l'évolutivité du code peuvent être améliorées.