nodejs 设计思想杂记 三 observer模式

来源:互联网 发布:网络电视能连手机吗 编辑:程序博客网 时间:2024/06/16 15:58

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

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







1 0
原创粉丝点击