Szenario: Ein Entensimulationsspiel. Es gibt verschiedene Arten von Enten im Spiel.
Der vorläufige Entwurfsplan ist im UML-Klassendiagramm unten dargestellt:
Änderung: Diese Anfangsphase schien einwandfrei, bis eines Tages das Spiel erschien Wenn die Ente fliegen muss, besteht die derzeit einfachste Lösung darin, der übergeordneten Klasse eine Fly-Methode hinzuzufügen. Das UML-Diagramm lautet wie folgt:
Eines Tages Es ist eine Katastrophe passiert: Im Spiel fliegen viele Gummienten umher. . . .
Die derzeit einfachste Lösung besteht darin, die Fly-Methode in der RubberDuck-Klasse zu überschreiben. Das Klassendiagramm lautet wie folgt:
Änderung: Das Spiel erfreut sich immer größerer Beliebtheit. Es gibt auch viele Arten von Enten, die weder quaken noch fliegen können ?
Lösung:
1. Entwerfen Sie „fly“ und „quack“ als Schnittstellen decoyduck Keine Schwimmmethode erforderlich)
Nachteile: Diese Lösung führt leicht zu Codeduplizierung und verwendet nicht dieselben Flug- und Quacksalbermethoden
2. Machen Sie flyable und quackable zu einer unabhängigen Klasse als Attribute der Ente. Das entsprechende UML-Klassendiagramm lautet wie folgt:
In dieser Methode sind Redheadduck, Rubberduck, Mallardduck und Decoyduck Sie Sie müssen die relevanten Methoden in den Klassen „Flyablity“ und „Quackablity“ verwenden, um bestimmte Flug- und Quackmethoden zu implementieren. Diese Lösung verstößt gegen den Grundsatz „Programmierung für Schnittstellen, nicht für bestimmte Implementierungen“ in der Designphilosophie. Sie kann nicht garantieren, dass es Funktionen geben muss, die von verschiedenen Enten in den Klassen „flyablity“ und „quackability“ benötigt werden
3. Ersetzen Sie „flyable“. und quacksalber Als Schnittstelle konzipiert, wird die konkrete Umsetzung durch verschiedene Flugfähigkeiten und Ruffähigkeiten vervollständigt.
Das Uml-Klassendiagramm sieht wie folgt aus:
Natürlich ändert sich die Situation immer noch, nur weil die Badeente nicht fliegen kann Jetzt heißt das nicht, dass es in Zukunft nicht mehr fliegen kann. Wir brauchen eine Methode, um seine Flugfähigkeiten festzulegen. Das Klassendiagramm lautet wie folgt:
Code-Download: Code herunterladen (http://www.walk-sing.com /strategy strategy mode.zip)
Hinweis: Während des eigentlichen Code-Schreibvorgangs habe ich festgestellt, dass Quack nach der Implementierung die Quack-Methode verwendet quackable, die Quack-Methode ist auch der Konstruktor von Quack auf dem Telefon, also wird beim Schreiben die Quack-Klasse Der Name wurde in Quacksalber-Kategorie geändert, ich hoffe, Sie wissen es.
Das Obige hat die Einführung in Design Patterns – Strategy Pattern (PHP-Version) vorgestellt, einschließlich der relevanten Inhalte. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.