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