Javascript中的策略模式
定义和好处
策略模式的定义是:
策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,让算法的变化不会影响到使用算法的客户。。
使用策略模式的好处如下:
- 策略模式利用组合,委托等技术和思想,有效的避免很多if条件语句。
- 策略模式提供了开放-封闭原则,使代码更容易理解和扩展。
- 策略模式中的代码可以复用。
为什么写这篇博客,这得从我最近遇到一个问题说起:
我要实现一个监控页面,这个监控页面采用的node.js + express + socket.io,监控数据是由后台提供的api接口提供,而且来自不同的地方,看下我的后台实现代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27// 获取流量数据
var http_get = function(host, option, callback){
var ret = {};
var http = require('http');
var qs = require('querystring');
var data = option || null;
var content = qs.stringify(data);
var options = {
hostname: host,
port: 80,
path: '/getData.php?' + content,
method: 'GET'
};
var req = http.request(options, function (res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
callback(chunk);
});
});
req.on('error', function (e) {
});
req.end();
}
定时获取监控数据:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23setInterval(function(){
var params = {
name: 'key1'
};
http_get('192.168.1.1', params, function(obj){
socket.emit('key1', { data: obj});
});
params = {
name: 'key2'
};
http_get('192.168.1.2', params, function(obj){
socket.emit('key2', { data: obj});
});
params = {
name: 'key3'
};
http_get('192.168.1.3', params, function(obj){
socket.emit('key3', { data: obj});
});
...
}, 5000);
可以看到,随着需要监控的节点越来越多,我就要不停的添加执行代码。
利用Javascript版本的策略模式改造:
1 | var nodes = { |
感谢您的阅读,有不足之处请在评论为我指出!
参考资料
[1]:深入理解JavaScript系列(33):设计模式之策略模式
[2]:理解Javascript中的策略模式
版权声明:本文为博主原创文章,未经博主允许不得转载。本文地址 http://yangyuji.github.io/2015/06/24/javascript-strategy-pattern/