美文网首页
Node.js与单例模式

Node.js与单例模式

作者: 海上名月 | 来源:发表于2017-12-19 16:01 被阅读0次

1、前端的JavaScript单例模式

单例模式是非常常用的设计模式,前端的JavaScript中单例模式代码可能 如下所示:

var GameManager = (function () {
    var singleton;
    function Construct() {
        //定义一些属性
        this.grid_x = 18;//x网格数量
        this.grid_y = 11;//y网格数量
        this.grideSize = 100;//网格大小
        this.xOffset = 40;// 场景偏移量
        this.yOffset = 40;// 场景偏移量
        this.playing = true;
        this.starMapArray = [];
        //。。。    
    }
    singleton = new Construct();
    return singleton;
})();

/**定义一些方法 */
GameManager.someFunction = function () {
        console.log("Hello World");
}

是的,正如你看到的,单例对象的方法属性定义时是不需要prototype关键字的;在使用该对象时,在需要的地方直接调用即可:

GameManager.someFunction();


2、Node.js的单例模式

总所都知,Node.js中是用module.exports来管理模块的;
假设有这样一个DealManager 模块 (文件为DealManager .js):

var DealManager = function () {};
DealManager.prototype.init = function () {
    console.log('hello world');
};

module.exports = DealManager;

这个模块在node.js中的使用通常是这样的:

var dealManager = require('./managers/DealManager');
...
var myDealManager = new dealManager();
myDealManager.init();

代码中可以定义多个dealManager实例对象;

因为module.exports本身是单例的;所以,在Node.js中创建单例模块比前端更容易一些,下面是DealManager在Node.js中的单例写法(DealManager_Singleton .js):

var DealManager = function () {};

module.exports.init = function () {
    console.log('hello world');
};

module.exports.DealManager = DealManager;

module.exports.DealManager表示给module.exports添加了一个属性;
module.exports.init 表示在这个模块的作用域内(DealManager_Singleton .js)添加一个init方法;这样,就产生了一个包含init方法的单例的DealManager对象了;

如果这时候,继续使用前面的调用方式,将得到一个错误提示:

var myDealManager = new dealManager();
                    ^

TypeError: dealManager is not a constructor
    at Object.<anonymous> (D:\nodejs\server\app.js:39:21)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)

这时候,dealManager已经不能使用new 方法了;它的正确的使用方法如下:

var dealManager = require('./managers/DealManager_Singleton');
dealManager.init();

这时的运行结果如下:

D:\nodejs\server\>node app.js
hello world

app.js代码就不列出了,相信你看这篇文章的时候,已经知道怎么创建和运行一个可以输出"hello world"的app.js的。

相关文章

  • Node.js与单例模式

    1、前端的JavaScript单例模式 单例模式是非常常用的设计模式,前端的JavaScript中单例模式代码可能...

  • 设计模式详解——单例模式

    本篇文章介绍一种设计模式——单例模式。本文参考文章:《JAVA与模式》之单例模式,如何正确地写出单例模式。 一、单...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • 2020-11-02-Spring单例 vs. 单例模式

    Spring 单例不是 Java 单例。本文讨论 Spring 的单例与单例模式的区别。 前言 单例是 Sprin...

  • 枚举单例——避免反序列化破坏单例

    六种单例模式实现 枚举单例 深度解析单例与序列化

  • Java多线程--并行模式与算法

    Java多线程--并行模式与算法 单例模式 虽然单例模式和并行没有直接关系,但是我们经常会在多线程中使用到单例。单...

  • 大话设计模式之_单例模式

    大话设计模式之___单例模式 什么是单例模式单例模式有哪些(会顺带讲些懒汉式的性能优化)懒汉式与饿汉式的区别 什么...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • 设计模式之单例模式详解

    设计模式之单例模式详解 单例模式写法大全,也许有你不知道的写法 导航 引言 什么是单例? 单例模式作用 单例模式的...

网友评论

      本文标题:Node.js与单例模式

      本文链接:https://www.haomeiwen.com/subject/frzbwxtx.html