Maison  >  Article  >  développement back-end  >  Comment utiliser le modèle de méthode de modèle en PHP ?

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

PHPz
PHPzoriginal
2024-06-04 17:15:00517parcourir

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() |
+----------------+

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() {}
}

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>";
    }
}

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();
    }
}

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>";
    }
}

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!

Déclaration:
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