Comment utiliser le modèle de méthode de modèle en PHP ?

PHPz
Libérer: 2024-06-04 17:15:00
original
486 Les gens l'ont consulté

Le modèle de méthode modèle définit le squelette de l'algorithme et les étapes spécifiques sont implémentées par des sous-classes, permettant aux sous-classes de personnaliser des étapes spécifiques sans modifier la structure globale. Ce modèle permet de : 1. Définir le squelette de l'algorithme. 2. Différer le comportement spécifique de l'algorithme aux sous-classes. 3. Autoriser les sous-classes à personnaliser certaines étapes de l'algorithme sans modifier la structure globale de l'algorithme.

Comment utiliser le modèle de méthode de modèle en PHP ?

Modèle de méthode modèle en PHP

Introduction

Le modèle de méthode modèle est un modèle de conception qui définit le squelette d'un algorithme, et les étapes spécifiques sont implémentées par des sous-classes. Cela permet aux sous-classes de personnaliser des étapes spécifiques sans modifier la structure globale de l'algorithme.

Diagramme UML

+----------------+
| AbstractClass  |
+----------------+
| + templateMethod() |
+----------------+

+----------------+
| ConcreteClass1  |
+----------------+
| + concreteMethod1() |
+----------------+

+----------------+
| ConcreteClass2  |
+----------------+
| + concreteMethod2() |
+----------------+
Copier après la connexion

Exemple de code

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() {}
}
Copier après la connexion

ConcreteClass1.php

class ConcreteClass1 extends AbstractClass
{
    protected function step1()
    {
        echo "ConcreteClass1: Step 1<br>";
    }

    protected function step2()
    {
        echo "ConcreteClass1: Step 2<br>";
    }
}
Copier après la connexion

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>";
    }
}
Copier après la connexion

Cas pratique

Supposons que nous ayons un étudiant Pour gérer le système, nous devons créer deux pages : la page « Liste des étudiants » et la page « Détails des étudiants ». Les deux pages utilisent la même mise en page, mais ont un contenu différent.

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();
    }
}
Copier après la connexion

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>";
    }
}
Copier après la connexion

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>";
    }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!