Maison  >  Article  >  interface Web  >  Explication détaillée de la façon d'implémenter le code du modèle d'observateur en javascript et php

Explication détaillée de la façon d'implémenter le code du modèle d'observateur en javascript et php

伊谢尔伦
伊谢尔伦original
2017-07-24 15:08:251098parcourir

Le modèle d'observateur signifie que lorsque l'état d'un objet change, tous les objets qui dépendent de l'état sont automatiquement notifiés. Les objets observés et les observateurs ont une relation un-à-plusieurs. Le livre donne également un exemple très facile à comprendre : obtenir l'heure actuelle du système et l'afficher sur la ligne de commande. Si vous souhaitez le coder en dur, c'est très simple Définissez d'abord une méthode pour obtenir l'heure puis traitez l'affichage. De cette façon, la fonction d'obtention du temps ne peut pas être réutilisée, car il s'agit d'une bouteille de traînée pour l'affichage du traitement.

Si vous utilisez le modèle d'observateur, vous pouvez définir deux classes, l'une pour chronométrer et obtenir l'heure actuelle ; l'autre pour afficher l'heure. La classe qui affiche l'heure est l'observateur. L'avantage est de réduire la dépendance mutuelle. La première classe n'a pas besoin de gérer quoi que ce soit après le changement. Elle doit seulement envoyer des notifications pour indiquer à ses observateurs qu'ils gèrent des choses spécifiques. Par exemple, un jour, nous souhaitons afficher l’heure sous une forme différente, ou afficher l’heure de plusieurs manières, sans impliquer du tout la première classe.

implémentation php

//被观察者
class Subject
{
    private $_observers;
    public function __construct() {
        $this->_observers = array();
    }
    public function add_observer($obs) {
        $this->_observers[] = $obs;
    }
    public funtion delete_observer($bos) {
        $index = array_search($bos, $this->_observers);
        unset($this->_observers[$index]);
    }
    public function notify_observers() {
        foreach($this->_observers as $v) {
            $v->update();
        }
    }
}
//观察者
class Observer
{
    public function __construct() {
        do sth;
    }
    public function update() {
        do sth;
    }
}
//实例
$sub = new Subject();
$obs = new Observer();
$sub->add_observer($obs);
$sub->notify_observers();

implémentation js

l'implémentation js n'est pas gênante, il vous suffit d'écrire un outil fonctions Pratique à utiliser, comme la suppression d'éléments spécifiés d'un tableau. Seule la méthode de mise en œuvre la plus simple est utilisée ci-dessous.

//被观察者
function Subject() {
    var _this = this;
    this.observers = [];
    this.addObserver = function(obj) {
        _this.observers.push(obj);
    }
    this.deleteObserver = function(obj) {
        var length = _this.observers.length;
        for(var i = 0; i < length; i++) {
            if(_this.observers[i] === obj) {
                _this.observers.splice(i, 1);
            }
        }
    }
    this.notifyObservers = function() {
        var length = _this.observers.length;
        console.log(length)
        for(var i = 0; i < length; i++) {
            _this.observers[i].update();
        }
    }
}
//观察者
function Observer() {
    this.update = function() {
        alert(1)
    }
}
var sub = new Subject();
var obs = new Observer();
sub.addObserver(obs);
sub.notifyObservers();
var sub = new Subject();

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