装饰者模式
- 符合开放关闭原则
- 装饰者模式和代理模式非常像,代理模式更加强调的是一种静态的关系,即一开始就确定了代理与本体的关系,
- 而装饰者模式更加强调的是,一种动态的关系, 如比如某个模块的功能写好了,想要动态的给这个模块添加一些功能,比如再这个模块函数后面添加一个log日志等
- 代理模式通常只是一层代理-本体,而装饰者模式经常形成一条长长的装饰链
- 装饰者模式也是包装器模式(wrapper)
比如写个AOP
//before也相当于wrapper 给目标函数加上一个before装饰
Function.prototype.before = function(before) {
var _this = this;
return function(args) {
before.apply(this, args);
_this.apply(this, args);
}
}
//给目标函数加上after装饰
Function.prototype.after = function(after) {
var _this = this;
return function(args) {
_this.apply(this, args);
after.apply(this, args);
}
}
function sendEmail() {
console.log('sendEmail');
}
var wrapper = sendEmail.before(function() {console.log('check email')})
.after(function () {console.log('check response')})
.after(function() {console.log('logger')});
wrapper();
// check email
// sendEmail
// check response
// logger
网友评论