裝飾者模式

裝飾者模式

  1. 符合開放關(guān)閉原則
  2. 裝飾者模式和代理模式非常像,代理模式更加強(qiáng)調(diào)的是一種靜態(tài)的關(guān)系,即一開始就確定了代理與本體的關(guān)系,
  3. 而裝飾者模式更加強(qiáng)調(diào)的是,一種動態(tài)的關(guān)系, 如比如某個模塊的功能寫好了,想要動態(tài)的給這個模塊添加一些功能,比如再這個模塊函數(shù)后面添加一個log日志等
  4. 代理模式通常只是一層代理-本體,而裝飾者模式經(jīng)常形成一條長長的裝飾鏈
  5. 裝飾者模式也是包裝器模式(wrapper)

比如寫個AOP

//before也相當(dāng)于wrapper 給目標(biāo)函數(shù)加上一個before裝飾
Function.prototype.before = function(before) {
  var _this = this;
  return function(args) {
    before.apply(this, args);
    _this.apply(this, args);
  }
}

//給目標(biāo)函數(shù)加上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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 本篇文章介紹一種設(shè)計模式——裝飾者模式。裝飾者模式在Java中的典型應(yīng)用就是IO流,在本篇文章中將有詳細(xì)介紹。本篇...
    Ruheng閱讀 22,300評論 13 56
  • 為了自身樂趣和加強(qiáng)理解使用閉包、猴子補(bǔ)丁、原型、代理和中間件5種不同方式在 javascript 中實(shí)現(xiàn)裝飾者模式...
    6ed7563919d4閱讀 1,771評論 0 7
  • 設(shè)計原則: 少用繼承,多用組合 類應(yīng)該對擴(kuò)展開放,對修改關(guān)閉 目錄 本文的結(jié)構(gòu)如下: 什么是裝飾者模式 為什么要用...
    w1992wishes閱讀 1,226評論 0 7
  • 近段時間一直在加班,在趕一個項(xiàng)目,現(xiàn)在項(xiàng)目接近尾聲,那么需要對過去一段時間工作內(nèi)容進(jìn)行復(fù)盤,總結(jié)下比較好的解決方案...
    斜杠時光閱讀 1,577評論 2 14
  • 在程序開發(fā)時,我們不希望某個類或者函數(shù)的方法非常復(fù)雜,一次就包含很多職責(zé);那么我們可以采用裝飾者模式,它可以在不改...
    狐尼克朱迪閱讀 141評論 0 1