Maison >développement back-end >tutoriel php >Comment fonctionne le modèle d'observateur en PHP ?

Comment fonctionne le modèle d'observateur en PHP ?

WBOY
WBOYoriginal
2024-06-03 14:09:02290parcourir

Le modèle Observer en PHP est un modèle de conception qui permet aux observateurs de s'abonner et de répondre aux changements d'état dans un sujet. Lorsque l'état du sujet change, elle en informe les observateurs, qui peuvent se mettre à jour en conséquence : la classe topic maintient une liste d'observateurs et fournit des méthodes pour attacher et supprimer des observateurs. La classe topic fournit des méthodes pour obtenir et définir l'état, et déclenche des notifications d'observateur lorsque l'état change. La classe observer définit une méthode de mise à jour qui est appelée lorsque l'état du sujet change. Les classes d'observateurs concrètes implémentent des méthodes de mise à jour pour mettre à jour leur propre logique. En pratique, les observateurs s'abonnent aux sujets et lorsque l'état du sujet change, l'observateur est averti et se met à jour.

Comment fonctionne le modèle dobservateur en PHP ?

Comment fonctionne le modèle Observer en PHP

Introduction

Le modèle Observer est un modèle de conception logicielle qui permet à des objets (appelés observateurs) de s'abonner aux changements d'état d'autres objets (appelés sujets) et de répondre à cela. Lorsque l'état du sujet change, il en informe tous les observateurs, et ces derniers peuvent se mettre à jour en conséquence.

Structure du code

En PHP, nous pouvons utiliser la structure de classe suivante pour implémenter le modèle d'observateur :

Classe de thème :

class Subject
{
    private $observers = [];
    private $state;

    public function attach(Observer $observer)
    {
        $this->observers[] = $observer;
    }

    public function detach(Observer $observer)
    {
        $index = array_search($observer, $this->observers);
        if ($index !== false) {
            unset($this->observers[$index]);
        }
    }

    public function getState()
    {
        return $this->state;
    }

    public function setState($state)
    {
        $this->state = $state;
        $this->notifyObservers();
    }

    private function notifyObservers()
    {
        foreach ($this->observers as $observer) {
            $observer->update($this);
        }
    }
}

Classe d'observateur :

interface Observer
{
    public function update(Subject $subject);
}

Classe d'observateur concret :

class ConcreteObserver1 implements Observer
{
    public function update(Subject $subject)
    {
        // 更新自己的逻辑
    }
}

class ConcreteObserver2 implements Observer
{
    public function update(Subject $subject)
    {
        // 更新自己的逻辑
    }
}

Cas pratique

Nous pouvons utiliser l'exemple de code suivant pour illustrer l'application du modèle Observer dans la pratique :

$subject = new Subject();

$observer1 = new ConcreteObserver1();
$observer2 = new ConcreteObserver2();

$subject->attach($observer1);
$subject->attach($observer2);

$subject->setState('New state'); // 触发更新

// 观察者收到更新并相应更新自己

Lorsque le statut d'un sujet est mis à jour, tous les observateurs qui y sont abonnés seront avertis et se mettront à jour en conséquence.

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