Das Vorlagenmethodenmuster definiert das Grundgerüst des Algorithmus, und die spezifischen Schritte werden von Unterklassen implementiert, sodass Unterklassen bestimmte Schritte anpassen können, ohne die Gesamtstruktur zu ändern. Dieses Muster wird verwendet, um: 1. das Grundgerüst des Algorithmus zu definieren. 2. Verschieben Sie das spezifische Verhalten des Algorithmus auf Unterklassen. 3. Ermöglichen Sie Unterklassen, bestimmte Schritte des Algorithmus anzupassen, ohne die Gesamtstruktur des Algorithmus zu ändern.
Einführung
Das Template-Methodenmuster ist ein Entwurfsmuster, das das Grundgerüst eines Algorithmus definiert und die spezifischen Schritte durch Unterklassen implementiert werden. Dadurch können Unterklassen bestimmte Schritte anpassen, ohne die Gesamtstruktur des Algorithmus zu ändern.
UML-Diagramm
+----------------+ | AbstractClass | +----------------+ | + templateMethod() | +----------------+ +----------------+ | ConcreteClass1 | +----------------+ | + concreteMethod1() | +----------------+ +----------------+ | ConcreteClass2 | +----------------+ | + concreteMethod2() | +----------------+
Codebeispiel
AbstractClass.php
abstract class AbstractClass { public function templateMethod() { $this->step1(); $this->step2(); $this->hookMethod(); } protected abstract function step1(); protected abstract function step2(); protected function hookMethod() {} }
ConcreteClass1.php
class ConcreteClass1 extends AbstractClass { protected function step1() { echo "ConcreteClass1: Step 1<br>"; } protected function step2() { echo "ConcreteClass1: Step 2<br>"; } }
ConcreteClass2.php
rrreePraktischer Fall
Angenommen, wir haben einen Studenten Um das System zu verwalten, müssen wir zwei Seiten erstellen: die Seite „Studentenliste“ und die Seite „Studentendetails“. Die beiden Seiten verwenden das gleiche Layout, haben aber unterschiedliche Inhalte.
StudentManager.php
class ConcreteClass2 extends AbstractClass { protected function step1() { echo "ConcreteClass2: Step 1<br>"; } protected function step2() { echo "ConcreteClass2: Step 2<br>"; } protected function hookMethod() { echo "ConcreteClass2: Hook Method<br>"; } }
StudentListView.php
class StudentManager { public function showStudentList() { $students = // 获取学生数据 $view = new StudentListView(); $view->setStudents($students); $view->render(); } public function showStudentDetail($id) { $student = // 获取学生数据 $view = new StudentDetailView(); $view->setStudent($student); $view->render(); } }
StudentDetailView.php
class StudentListView extends AbstractView { private $students; public function setStudents($students) { $this->students = $students; } public function render() { $this->showHeader(); $this->showStudents(); $this->showFooter(); } protected function showStudents() { echo "<h1>学生列表</h1>"; echo "<ul>"; foreach ($this->students as $student) { echo "<li>" . $student->getName() . "</li>"; } echo "</ul>"; } }
Das obige ist der detaillierte Inhalt vonWie verwende ich ein Vorlagenmethodenmuster in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!