템플릿 메소드 패턴은 알고리즘의 골격을 정의하고 특정 단계는 하위 클래스에 의해 구현되므로 하위 클래스가 전체 구조를 변경하지 않고도 특정 단계를 사용자 정의할 수 있습니다. 이 패턴은 다음 용도로 사용됩니다. 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>"; } }
실제 사례
학생이 있다고 가정해 보겠습니다. 시스템을 관리하려면 "학생 목록" 페이지와 "학생 세부 정보" 페이지라는 두 개의 페이지를 만들어야 합니다. 두 페이지는 동일한 레이아웃을 사용하지만 내용이 다릅니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!