您的位置:首页 > Web前端 > Node.js

nodejs 设计思想杂记 三 observer模式

2016-07-06 12:55 471 查看
观察者模式:一个对象,当其状态改变时能够通知一系列的观察者。

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);

});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nodejs node