ホームページ >バックエンド開発 >PHPチュートリアル >PHPでテンプレートメソッドパターンを使用するにはどうすればよいですか?
テンプレート メソッド パターンはアルゴリズムのスケルトンを定義し、特定のステップはサブクラスによって実装されるため、サブクラスは全体の構造を変更せずに特定のステップをカスタマイズできます。このパターンは次の目的で使用されます。 1. アルゴリズムのスケルトンを定義します。 2. アルゴリズムの特定の動作をサブクラスに延期します。 3. アルゴリズム全体の構造を変更せずに、サブクラスがアルゴリズムの特定のステップをカスタマイズできるようにします。
はじめに
テンプレート メソッド パターンは、アルゴリズムの骨格を定義する設計パターンであり、特定のステップはサブクラスによって実装されます。これにより、サブクラスはアルゴリズムの全体的な構造を変更することなく、特定のステップをカスタマイズできます。
UML 図
+----------------+ | AbstractClass | +----------------+ | + templateMethod() | +----------------+ +----------------+ | ConcreteClass1 | +----------------+ | + concreteMethod1() | +----------------+ +----------------+ | ConcreteClass2 | +----------------+ | + concreteMethod2() | +----------------+
コード例
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
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>"; } }
実際的なケース
生徒がいると仮定します。システムを管理するには、「学生リスト」ページと「学生詳細」ページの 2 つのページを作成する必要があります。 2 つのページは同じレイアウトを使用していますが、内容が異なります。
StudentManager.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(); } }
StudentListView.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>"; } }
StudentDetailView.php
class StudentDetailView extends AbstractView { private $student; public function setStudent($student) { $this->student = $student; } public function render() { $this->showHeader(); $this->showStudent(); $this->showFooter(); } protected function showStudent() { echo "<h1>学生详情</h1>"; echo "<p>姓名:" . $this->student->getName() . "</p>"; echo "<p>年龄:" . $this->student->getAge() . "</p>"; } }
以上がPHPでテンプレートメソッドパターンを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。