Strategiemuster, was ist Strategiemuster, definiert eine Familie von Algorithmen und kapselt sie separat, sodass sie untereinander ersetzt werden können. Dieses Muster macht die Änderungen des Algorithmus unabhängig von den Kunden, die den Algorithmus verwenden.
Lassen Sie uns das Strategiemuster anhand von Enten erklären. Enten haben zwei Verhaltensweisen: Quaken und Fliegen. Allerdings können nicht alle Enten quaken und fliegen, daher extrahieren wir diese beiden Verhaltensweisen, die zu Veränderungen führen.
<?php abstract class Duck{ public $flyBehavior; public $quackBehavior; public function __construct(){ } public function performFly(){ $this->flyBehavior->fly(); } public function performQuack(){ $this->quackBehavior->quack(); } public function setFlyBehavior(FlyBehavior $fb){ $this->flyBehavior = $fb; } public function setQuackBehavior(QuackBehavior $qb){ $this->quackBehavior = $qb; } public function swim(){ } abstract function display(); } interface FlyBehavior{ public function fly(); } class FlywithWings implements FlyBehavior{ public function fly(){ echo "i'm flying!\n"; } } class FlyNoWay implements FlyBehavior{ public function fly(){ echo "i can't fly.\n"; } } class FlyRocketPowered implements FlyBehavior{ public function fly(){ echo "i'm flying with a rocket!\n"; } } interface QuackBehavior{ public function quack(); } class Quack implements QuackBehavior{ public function quack(){ echo "quack!\n"; } } class MuteQuack implements QuackBehavior{ public function quack(){ echo "silence\n"; } } class MallardDuck extends Duck{ public function __construct(){ $this->quackBehavior = new Quack(); $this->flyBehavior = new FlyNoWay(); } public function display(){ echo "i'm a real mallar duck\n"; } } $duck = new MallardDuck; $duck->performFly(); $duck->setFlyBehavior(new FlyRocketPowered); $duck->performFly(); ?>
Aus dem obigen Code können wir ersehen, dass wir die Ente abstrahiert haben und das Flugverhalten und das Quacksalberfahren in Form von Schnittstellen vorliegen. Das Entwurfsprinzip besteht darin, mehr Kombinationen und weniger Vererbung zu verwenden. Es ist relativ flexibler. Algorithmen werden nicht nur in Klassen gekapselt und können „das Verhalten zur Laufzeit dynamisch ändern“, solange das kombinierte Verhaltensobjekt den richtigen Schnittstellenstandard erfüllt.
Das Obige stellt das Head First-Strategiemodell und seine Aspekte vor. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.