nodejs 设计思想杂记 三 observer模式

本文探讨了Node.js中的观察者模式,通过EventEmitter实现事件监听和触发。介绍了一个名为FindPattern的类,用于查找文件中匹配正则表达式的模式,并在找到匹配项时触发事件。示例展示了如何创建FindPattern实例,添加文件,查找模式并监听'found'和'error'事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

观察者模式:一个对象,当其状态改变时能够通知一系列的观察者。

EventEmitter

看图说话


使用方法:

var EventEmitter = require('events').EventEmitter;
var eeInstance = new EventEmitter();

提供有几个接口:

on(event, listener): 对event与linstener的绑定,listener可以是function

once(event, listener):功能同上,但是收到过一次event就解除绑定

emit(event, [arg1], […]): 发送event

removeListener(event, listener):解除绑定


使用方法:

var EventEmitter = require('events').EventEmitter;
var util = require('util');
var fs = require('fs');
function FindPattern(regex) {
EventEmitter.call(this);
this.regex = regex;
this.files = [];
}
util.inherits(FindPattern, EventEmitter);
FindPattern.prototype.addFile = function(file) {
this.files.push(file);
return this;
};

FindPattern.prototype.find = function() {
var self = this;
self.files.forEach(function(file) {
fs.readFile(file, 'utf8', function(err, content) {
if(err)
return self.emit('error', err);
self.emit('fileread', file);
var match = null;
if(match = content.match(self.regex))
match.forEach(function(elem) {
self.emit('found', file, elem);
});
});
});
return this;
};


obsever

var findPatternObject = new FindPattern(/hello \w+/);
findPatternObject
.addFile('fileA.txt')
.addFile('fileB.json')
.find()
.on('found', function(file, match) {
console.log('Matched "' + match + '" in file ' + file);
})
.on('error', function(err) {
console.log('Error emitted ' + err.message);
});







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值