Maison >interface Web >js tutoriel >Mode singleton NodeJS, mode adaptateur, mode décoration, résumé du mode observateur

Mode singleton NodeJS, mode adaptateur, mode décoration, résumé du mode observateur

巴扎黑
巴扎黑original
2017-09-07 10:25:181608parcourir

Cet article présente principalement le modèle de conception NodeJS, et résume et analyse les concepts, principes et techniques d'implémentation spécifiques du mode singleton, du mode adaptateur, du mode décoration et du mode observateur de nodejs sous forme d'exemples. Les amis dans le besoin peuvent s'y référer.

Cet article décrit le modèle de conception NodeJS avec des exemples. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

1. Mode Singleton

Comme son nom l'indique, un singleton garantit qu'une classe n'en a qu'un. instance.La méthode d'implémentation est la suivante: Déterminez d'abord si l'instance existe.Si elle existe, renvoyez-la directement.Si elle n'existe pas, créez un objet instance et enregistrez-le dans une variable statique. renvoie cette instance d'objet. Cela garantit qu'une classe Il n'y a qu'une seule instance d'objet. Par exemple, une école vient d'être construite et il n'y a pas encore de bibliothèque. Certains étudiants ont demandé au leader : « Hé ! Frère, pouvez-vous nous aider à construire une bibliothèque (vous voulez un exemple de bibliothèque), puis le leader a répondu ? : "Pas de problème ! Attendez-moi et je vais la construire pour vous tout de suite" (l'instance n'a pas encore été créée, alors créez-en une). Quelques mois plus tard, la bibliothèque a été construite. Il y avait un étrange camarade de classe qui voulait aussi aller à la bibliothèque, mais il a fait une demande au chef : " Hé ! Mec, je veux aller à la bibliothèque. Pouvez-vous m'aider ? " en construire une ?" Puis le leader dit : "Pas de problème ! Il y en a déjà une construite là-bas, tu ne peux pas y aller !" (Lorsque l'instance existe déjà, l'instance créée sera renvoyée directement)


/*singleInstance.js*/
var _instance = null;//定义初始化_instance
module.exports = function(time){
   function Car(time){
     this.time = time;
   }
   this.getInstance = function(){
     if(_instance != null){
       return _instance;
     }else{
       return new Car(time);
     }
   }
}

2. Modèle d'adaptateur

Si l'interface d'une classe est convertie en une autre interface souhaitée par le client, le modèle d'adaptateur peut créer le modèle d'adaptateur. interface d'origine incompatible Et les classes qui ne fonctionnent pas ensemble peuvent travailler ensemble. Par exemple ~ Le père de Xiao Ming, Daming, adore boire de l'alcool, mais boire est nocif pour le corps quand il l'a vu, alors il a pensé à un moyen : verser l'alcool dans la bouteille d'alcool et. remplacez-le par de l'eau bouillie (lourde). Quand Da Ming a vu que c'était toujours la même bouteille de vin, il n'y a pas prêté beaucoup d'attention (l'interface n'a pas changé, seul le contenu a changé), et il a bu le "vin" d'un seul coup, et il était très heureux ~ (Je suppose ici que Da Ming a un faible QI...). Par conséquent, le dominateur est un bon moyen d'atteindre vos propres objectifs sans offenser les autres. Voici la méthode de mise en œuvre spécifique


/*target.js*/
module.exports = function(){
  this.request = function(){//原接口
    console.log('Target::request');
  }
}


/*adapter.js*/
var util = require('util');
var Target = require('./target.js');
var Adaptee = require('./adaptee.js');
function Adapter(){
  Target.call(this);
  this.request = function(){//重写原接口
    var adapteeObj = new Adaptee();//重写的内容
    adapteeObj.specialRequest();
  }
}
util.inherits(Adapter, Target);//通过继承原模块, 获得原接口
module.exports = Adapter;
.

3. Mode Décoration

Le mode Décoration peut étendre les fonctions d'un objet de classe de base via l'héritage. Par exemple, un sapin de Noël n’a rien au début. Ensuite, Amy l'a vu et a accroché quelques décorations sur l'arbre (étendant ainsi la classe de base d'origine). Puis, quand Billy est passé par là, il a senti qu'il manquait encore quelque chose, alors il a repris l'arbre de Noël (il en a hérité), puis en a mis un autre. ornements dessus (continuer à s'étendre).


/*Base.js*/
module.exports = function(){
  this.dosomething = function(){
   console.log("Nice to meet u.");
  }
}


/*Decorator.js*/
var util = require("util);
var Base = require('./Base');
function Decorator(){
  Base.call(this);
  this.dosomething = function(){
     Base.dosomething();
     console.log('I am a decorator');//拓展内容
  }
}
util.inherits(Decorator, Base);//继承
module.exports = Decorator;

4. Mode observateur

Qu'est-ce que l'observation ? à propos ou mode? Par exemple, les camarades de classe Puppy et Bear sont tombés amoureux du mignon lapin de la classe en même temps. Le chiot et l'ours seront attentifs à chaque mouvement du lapin. Ce n'est que lorsque le lapin bouge qu'ils sauront tous les deux que, relativement parlant, le chiot et l'ours sont les « observateurs » du lapin, tandis que le lapin est « l'observateur ». ".objet d'observation". Le plus important est que le mouvement du lapin (une certaine fonction) avertira les observateurs du chiot et de l'ours en même temps, afin qu'ils donnent également un retour correspondant (fonctions de rappel respectives)


/*被观察者*/
module.exports = function(){
  var m_obserSet = [];//观察者列表
  var _self = this;
  this.addObser = function(observer){
    m_obserSet.push(observer);//添加观察者
  }
  this.doAction = function(){
    console.log("Observable do some action");
    _self.notifyAllObeser();
  }
  this.notifyAllObeser = function(){//发生动作
    for(var key in m_obserSet){//逐个通知观察者
      m_obserSet[key].update();//观察者执行回调
    }
  }
}

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