装饰者模式

装饰者模式

  1. 符合开放关闭原则
  2. 装饰者模式和代理模式非常像,代理模式更加强调的是一种静态的关系,即一开始就确定了代理与本体的关系,
  3. 而装饰者模式更加强调的是,一种动态的关系, 如比如某个模块的功能写好了,想要动态的给这个模块添加一些功能,比如再这个模块函数后面添加一个log日志等
  4. 代理模式通常只是一层代理-本体,而装饰者模式经常形成一条长长的装饰链
  5. 装饰者模式也是包装器模式(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

你可能感兴趣的:(装饰者模式)