Maison  >  Article  >  développement back-end  >  Ce que vous ne savez pas sur le modèle d'observateur php

Ce que vous ne savez pas sur le modèle d'observateur php

一个新手
一个新手original
2017-09-12 10:16:111330parcourir

Commençons par le nom. Le mot « mode observateur » contient beaucoup d’informations. Les enfants qui ont joué à de nombreux jeux en ligne doivent savoir que même à Doudizhu, en plus des joueurs, il y a aussi un personnage appelé "Observateur". Dans le modèle de conception dont nous parlons aujourd’hui, il en va de même pour les observateurs. Premièrement, il doit y avoir un « thème ». Ce n'est qu'avec un thème que les observateurs peuvent se rassembler autour de petits tabourets. Deuxièmement, l'observateur doit également avoir ses propres opérations. Sinon, cela ne sert à rien de se rassembler et de ne rien faire.

Dans une perspective orientée processus, d'abord l'observateur s'enregistre auprès du sujet Après l'enregistrement, le sujet informe l' observateur de faire opérer et tout est fini.

D'un point de vue orienté objet, les sujets fournissent des interfaces pour l'enregistrement et la notification, et les observateurs fournissent des interfaces pour leurs propres opérations. (Ces observateurs ont la même interface.) Les observateurs utilisent l'interface du sujet pour s'inscrire au sujet, et le sujet utilise l'interface de l'observateur pour notifier les observateurs. Le degré de couplage est assez faible.

Comment mettre en œuvre l'enregistrement des observateurs ? Le modèle de déclarant précédent peut facilement nous fournir des idées, il suffit d'ajouter ces objets à un arbre d'enregistrement. Comment notifier ? Il est beaucoup plus simple de parcourir l'arborescence d'enregistrement et de laisser chaque objet implémenter les opérations fournies par son interface. ​

<?php
// 主题接口
interface Subject{
    public function register(Observer $observer);
    public function notify();
}
// 观察者接口
interface Observer{
    public function watch();
}
// 主题
class Action implements Subject{
     public $_observers=array();
     public function register(Observer $observer){
         $this->_observers[]=$observer;
     }

     public function notify(){
         foreach ($this->_observers as $observer) {
             $observer->watch();
         }

     }
 }

// 观察者
class Cat implements Observer{
     public function watch(){
         echo "Cat watches TV<hr/>";
     }
 } 
 class Dog implements Observer{
     public function watch(){
         echo "Dog watches TV<hr/>";
     }
 } 
 class People implements Observer{
     public function watch(){
         echo "People watches TV<hr/>";
     }
 }

// 应用实例
$action=new Action();
$action->register(new Cat());
$action->register(new People());
$action->register(new Dog());
$action->notify();
Le soi-disant modèle est plutôt une idée, et il n'est pas nécessaire de s'en tenir aux détails du code. Le modèle d'observateur concerne davantage deux classes indépendantes utilisant des interfaces pour réaliser quelque chose qui devrait être très compliqué. Si nous n'utilisons pas de classes de thème, nous devons toujours créer des instances en continu et effectuer des opérations en boucle. Il ne vous reste plus qu'à créer une instance et à appeler la méthode de notification une seule fois pour effectuer l'opération.

En partant du mode singleton au début, j'ai réfléchi à la façon d'implémenter le code étape par étape. Maintenant, la plupart du code d'implémentation a été expliqué en une phrase. les précédents. J'ai vraiment le sentiment que grâce à l'apprentissage continu des modèles de conception, je peux considérablement approfondir ma réflexion sur la programmation orientée objet. Bien sûr, ça ne sert toujours à rien de parler sur papier, il vaut mieux mettre plus de pratique~~·


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