示例代码,模拟创建简单的服务器程序
// 调用方法
var nodeServer = new BasicServer();
nodeServer = nodeServer.decorate('serveNode'); // 使用装饰器
nodeServer = nodeServer.decorate('decorateIt');
nodeServer = nodeServer.decorate('3000');
nodeServer.init(); // 初始化服务器
// 实现服务器
function BasicServer() {
// 服务器的基本配置
this.pid = 1;
this.decoratorsList = [];
}
// 创建承载装饰器的对象
BasicServer.decorators = {};
// 定义装饰器
BasicServer.decorators.serveNode = {
init: function() {
// ...
},
};
BasicServer.decorators.decorateIt = {
init: function() {
// ...
},
};
// 调用 decorate 时,将装饰器加入到列表
BasicServer.prototype.decorate = function(decorator) {
this.decoratorsList.push(decorator);
};
// 调用 init 方法,将依次调用装饰器的 init 方法,这算是一种协议
BasicServer.prototype.init = function() {
var runningProcesses = null;
var pid = this.pid;
for (var i = 0; i < this.decoratorsList.length; i++) {
decoratorName = this.decoratorsList[i];
BasicServer.decorators[decoratorName].init();
}
}:
Notes:
BasicServer.decorate()
用来记录需要用到的装饰器BasicServer.init()
用来一次执行每一个装饰器中实现的协议方法BasicServer.init()
与装饰器需要协定一个方法,这个方法保证了装饰器生效