Node.js中通用基础设计模式实例分析

一般我们对node.js设计模式(观察者) 或 factories(工厂方法)比较熟悉,本文重点给大家介绍node.js一些基础模式的实现方法,感兴趣的朋友跟随脚本之家小编一起学习吧,本文不并专门探讨他们。只是探讨node.js一些基础模式的实现,像依赖注入或中间件,希望能帮助到大家。

什么是设计模式?

设计模式是用来解决一般的,普遍发生的问题,且可重复使用的解决方案。

Singletons (单例)

Singletons模式限制了“类”,只有一个实例。在Node.js的创建单例是非常简单的,比如下面这个require。

//area.jsvar PI = Math.PI;function circle (radius) {  return radius * radius * PI;}module.exports.circle = circle;

登录后复制

你引用多少次都没有关系;它将只存在一个单一的实例。

var areaCalc = require('./area');console.log(areaCalc.circle(5));

登录后复制

由于 require 的这种实现,单例可能在NPM模块中最常见的Node.js设计模式。

Observers(观察者)

一个维护了侦听/观察列表的对象,当状态改变时会自动通知他们。为了实现观察者模式,EventEmitter就派上用场了。

// MyFancyObservable.jsvar util = require('util'); var EventEmitter = require('events').EventEmitter;function MyFancyObservable() {  EventEmitter.call(this);}util.inherits(MyFancyObservable, EventEmitter);

登录后复制

就是这个;我们实现了一个可观察的对象!为了用它,让我们添加一些方法吧。

MyFancyObservable.prototype.hello = function (name) {  this.emit('hello', name);};

登录后复制

太好了,试试侦听并响应这个事件!

var MyFancyObservable = require('MyFancyObservable'); var observable = new MyFancyObservable();observable.on('hello', function (name) {  console.log(name);});observable.hello('john');

登录后复制

Factories (工厂方法)

工厂模式是一种创建者模式,不需要我们使用构造函数,它提供用于创建对象的通用接口。这种模式可以用于生成创建过程非常复杂的对象。

function MyClass (options) {  this.options = options;}function create(options) {  // modify the options here if you want return new MyClass(options);}module.exports.create = create;

登录后复制

工厂可以让测试更简单,因为你可以在里面注入依赖关系。

Dependency Injection 依赖注入

依赖注入是将其中的一个或多个依赖(或服务)注入,或通过引用传递到从属对象的设计模式。

在这个例子中,我们将创建一个的usermodel它获取数据库的依赖。

function userModel (options) {  var db; if (!options.db) {  throw new Error('Options.db is required'); } db = options.db; return {  create: function (done) {   db.query('INSERT ...', done);  } }}module.exports = userModel;

登录后复制

现在,我们利用它创建一个实例:

var db = require('./db');var userModel = require('User')({  db: db});

登录后复制

它为什么有用呢?它使测试变得更容易 – 当你写单元测试时,你可以把假的数据库实例注入模型。

Middlewares/pipelines 中间件/管道

中间件是一个强大功能且简单的概念:一个功能单元的输出是下一个功能单元的输入。如果你用过Express那么你已经使用了这个模式。

我们看一看 Koa 是如何做的:

app.use = function(fn){  this.middleware.push(fn); return this;};

登录后复制

所以基本上,当你添加一个中间件时,它只是被压入一个中间件队列中。但是当一个请求到达这个服务器会发生什么?

var i = middleware.length; while (i--) {  next = middleware[i].call(this, next);}

登录后复制

没什么神奇的 – 你的中间件被一个接着一个调用了。

Streams

你可以把流作为特殊的管道。他比较适合处理大量数据流,即他们是字节,而不是对象。

process.stdin.on('readable', function () {   var buf = process.stdin.read(3);  console.dir(buf);  process.stdin.read(0);});

登录后复制

php设计模式之服务定位器模式实例详解

详解PHP设计模式之委托模式

详解PHP设计模式之备忘录模式

以上就是Node.js中通用基础设计模式实例分析的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2787031.html

(0)
上一篇 2025年3月8日 18:00:36
下一篇 2025年3月8日 18:00:44

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Javascript将变量转换为字符串代码分享

    大家应该都知道,对于javascript,有3种不同方法可以将变量转换为字符串。这篇文章将详细介绍这些方法,并比较他们的优劣。本文主要和大家介绍关于javascript中将变量转换为字符串的三种方法,这三种方法分别是:value.tostr…

    编程技术 2025年3月8日
    200
  • JS中的this、apply、call、bind实例分享

    this 的指向 在 ES5 中,其实 this 的指向,始终坚持一个原理:this 永远指向最后调用它的那个对象,来,跟着我朗读三遍:this 永远指向最后调用它的那个对象,this 永远指向最后调用它的那个对象,this 永远指向最后调…

    编程技术 2025年3月8日
    200
  • JavaScript中的this规则及this对象用法实例

    想要确定this里规则是什么,几条规则确定函数里的 this 是什么。想确定 this 是什么其实非常简单。总体的规则是,通过检查它的调用位置,在函数被调用的的时候确定 this。它遵循下面这些规则,接下来以优先级顺序说明。 规则 1、如果…

    编程技术 2025年3月8日
    200
  • 如何在Node.js中使用原生ES模块

    从版本 8.5.0 开始,node.js 开始支持原生 es 模块,可以通过命令行选项打开该功能。新功能很大程度上得归功于 bradley farias。本文主要和大家介绍在 node.js 中使用原生 es 模块方法解析,还有部分内容的链…

    编程技术 2025年3月8日
    200
  • 实例详解js中ajax访问

    本文主要和大家介绍原生js中ajax访问的实例详解的相关资料,希望通过本文大家能够掌握理解这部分内容,需要的朋友可以参考下,希望能帮助到大家。 原生js中ajax访问的实例详解 form表单中 登录名: 失去光标即触发事件 function…

    编程技术 2025年3月8日
    200
  • angluarjs过滤并替换关键字功能实现代码

    本文主要和大家大家详细介绍angluarjs实现过滤并替换关键字小功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。 html样式       {{ keytext|wordFilter:”#” }} 登录后复制 /…

    2025年3月8日
    200
  • JavaScript数组去重的几种方法分享

    数组去重,一般需求是给你一个数组,调用去重方法,返回数值副本,副本中没有重复元素。一般来说,两个元素通过 === 比较返回 true 的视为相同元素,需要去重,所以,1 和 “1” 是不同的元素,1 和 new nu…

    编程技术 2025年3月8日
    200
  • js实现抽奖系统功能代码分享

    本文主要和大家详细介绍了一个关于抽奖系统的题目之js抽奖系统功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助大家运用js开发一个抽系统。 要求实现功能: 1.点击左侧按键,开始抽奖,点击右侧按键,停止抽奖; 2.敲击回车键…

    编程技术 2025年3月8日
    200
  • JavaScript事件处理程序详解

    本文主要和大家详细介绍javascript事件处理程序的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。 nbsp;html>    DOM0级DOM2级 function show() { alert(…

    编程技术 2025年3月8日
    200
  • 全面讲解js中的原型

    在讲js的原型之前,必须先了解下object和function。object和function都作为js的自带函数,object继承自己,funtion继承自己,object和function互相是继承对方,也就是说object和funct…

    2025年3月8日
    200

发表回复

登录后才能评论