Strategiemuster ist ein Verhaltensdesignmuster, das eine Reihe von Algorithmen definiert und jeden Algorithmus zusammenfasst, damit sie durcheinander ersetzt werden können. Dies stellt sicher, dass sich der Algorithmus nicht mit dem Algorithmus auf den Client auswirkt.
In der Softwareentwicklung müssen Entwickler häufig verschiedene Algorithmen entsprechend unterschiedlichen Bedingungen auswählen, um das Problem zu lösen. Wenn Sie alle Algorithmen direkt in den Code schreiben, kann der Code komplex und schwer zu warten. Das politische Muster verbessert die Wartbarkeit und Skalierbarkeit des Codes, indem der Algorithmus unabhängig von Kundenänderungen in unterschiedliche Richtlinien eingekapselt wird.
Ein Strategiemuster besteht normalerweise aus drei Hauptrollen:
Angenommen, Sie entwickeln eine E-Commerce-Plattform und müssen den Rabattpreis des Produkts basierend auf der Mitgliedschaftsniveau berechnen. Unterschiedliche Mitgliedsniveaus entsprechen unterschiedlichen Rabattalgorithmen.
Zunächst müssen wir eine abstrakte Strategieklasse definieren, die Rabattalgorithmen für verschiedene Mitgliedschaftsniveaus darstellt.
interface DiscountStrategy {
public function calculate($price);
}
Definieren Sie als nächstes mehrere spezifische Strategieklassen, um verschiedene Rabattalgorithmen zu implementieren. Zum Beispiel der Rabattalgorithmus für gewöhnliche Mitglieder und VIP -Mitglieder:
class RegularMemberDiscount implements DiscountStrategy {
public function calculate($price) {
// Berechnung von Rabatten für normale Mitglieder
$discountedPrice = $price * 0.9;
echo "Ermäßigter Preis für gewöhnliche Mitglieder:" . $discountedPrice . "\n";
}
}
class VIPMemberDiscount implements DiscountStrategy {
public function calculate($price) {
// VIPMitgliederrabattberechnung
$discountedPrice = $price * 0.8;
echo "VIPMitgliederrabattpreis:" . $discountedPrice . "\n";
}
}
Anschließend müssen wir eine Umgebungsklasse definieren, um Rabatte basierend auf dem aktuellen Richtlinienobjekt zu berechnen:
class DiscountCalculator {
private $strategy;
public function __construct(DiscountStrategy $strategy) {
$this->strategy = $strategy;
}
public function calculateDiscount($price) {
$this->strategy->calculate($price);
}
}
Durch die Verwendung des Strategiemodells können wir die Rabattpreise auf der Grundlage verschiedener Mitgliedschaftsniveaus problemlos berechnen:
$price = 100.0;
$regularMemberDiscount = new RegularMemberDiscount();
$vipMemberDiscount = new VIPMemberDiscount();
$calculator = new DiscountCalculator($regularMemberDiscount);
$calculator->calculateDiscount($price);
$calculator = new DiscountCalculator($vipMemberDiscount);
$calculator->calculateDiscount($price);
Das Strategiemodell ist ein häufig verwendetes Designmodell, insbesondere für Szenarien, in denen Algorithmen in verschiedenen Situationen flexibel ausgewählt werden müssen. Durch politische Muster werden Algorithmen in unabhängige Richtlinienklassen eingekapselt, sodass sie dynamisch ersetzt werden können, was nicht nur die Wartbarkeit des Systems verbessert, sondern auch die Einführung neuer Algorithmen erleichtert.
In dem Beispiel in diesem Artikel entkoppeln wir den Algorithmus des Kunden erfolgreich durch die Gestaltung abstrakter Richtlinienklassen und spezifischer Richtlinienklassen. Auf diese Weise können die Auswirkungen auf den Client -Code vermieden werden und die Wiederverwendbarkeit und Skalierbarkeit des Codes verbessert werden, wenn es in Zukunft neue Mitgliedschaftsniveaus hinzufügt oder Rabattalgorithmen geändert wird.