锐评 Nodejs 设计模式 - 创建与结构型

本系列文章的思想,都融入了 让 Java 再次伟大 这个全新设计的脚手架产品中,欢迎大家使用。

单例模式与模块系统

Node 的单例模式既特殊又简单——凡是从模块中导出的实例天生就是单例。

// database.js
function Database(connect, account, password) {
   
  this.connect = connect;
  this.account = account;
  this.password = password;
}
const database = new Database("localhost", "root", "123456");
export default database;

// index.js
import database1 from "./database.js";
import database2 from "./database.js";

console.log(database1 === database2); // true

这是由于 Node.js 加载完某个模块后,会创建模块与模块标识符
(module specifier) 的映射关系并将其缓存起来供后续使用,就像下面这样:

pseudo code (CommonJS module)

function loadModule(filename, module, require) {
   
  const wrappedSrc = `(function(module,exports,require) {
    ${
     fs.readFileSync(filename, "utf8")} 
  })(module,module.exports,require)`;
  eval(wrappedSrc);
}

function require(moduleName) {
   
  const id = require.resolve(moduleName);
  // 加载缓存
  if (require.cache[id]) {
   
    return require.cache[id].exports;
  }
  const module = {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值