ホームページ > バックエンド開発 > PHPチュートリアル > PHPでテンプレートメソッドパターンを使用するにはどうすればよいですか?

PHPでテンプレートメソッドパターンを使用するにはどうすればよいですか?

PHPz
リリース: 2024-06-04 17:15:00
オリジナル
544 人が閲覧しました

テンプレート メソッド パターンはアルゴリズムのスケルトンを定義し、特定のステップはサブクラスによって実装されるため、サブクラスは全体の構造を変更せずに特定のステップをカスタマイズできます。このパターンは次の目的で使用されます。 1. アルゴリズムのスケルトンを定義します。 2. アルゴリズムの特定の動作をサブクラスに延期します。 3. アルゴリズム全体の構造を変更せずに、サブクラスがアルゴリズムの特定のステップをカスタマイズできるようにします。

PHPでテンプレートメソッドパターンを使用するにはどうすればよいですか?

PHP のテンプレート メソッド パターン

はじめに

テンプレート メソッド パターンは、アルゴリズムの骨格を定義する設計パターンであり、特定のステップはサブクラスによって実装されます。これにより、サブクラスはアルゴリズムの全体的な構造を変更することなく、特定のステップをカスタマイズできます。

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート