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);
});
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);
});
相关文章推荐
- 使用ruby部署工具mina快速部署nodejs应用教程
- 快速掌握Node.js环境的安装与运行方法
- Google官方支持的NodeJS访问API,提供后台登录授权
- 浅谈Nodejs观察者模式
- nodejs教程之环境安装及运行
- nodejs中的fiber(纤程)库详解
- Windows系统下Node.js的简单入门教程
- 在Node.js应用中使用Redis的方法简介
- 基于NodeJS的前后端分离的思考与实践(五)多终端适配
- 基于NodeJS的前后端分离的思考与实践(二)模版探索
- 在Ubuntu系统上安装Ghost博客平台的教程
- Node.js编程中客户端Session的使用详解
- 使用Raygun对Node.js应用进行错误处理的方法
- 实例详解Nodejs 保存 payload 发送过来的文件
- 在Mac OS下使用Node.js的简单教程
- 我的NodeJs学习小结(一)
- Node.js 应用跑得更快 10 个技巧
- nodejs中实现sleep功能实例
- Node.js环境下编写爬虫爬取维基百科内容的实例分享