摘要:設(shè)計模式裝飾者模式何為裝飾者,意思就是,在不影響對象主功能的情況下,再添加一些額外的功能,使對象具備更多的功能。與繼承相比,裝飾者是一種更靈活輕便的做法。
javascript設(shè)計模式 --- 裝飾者模式
何為裝飾者,意思就是,在不影響對象主功能的情況下,再添加一些額外的功能,使對象具備更多的功能。與繼承相比,裝飾者是一種更靈活輕便的做法。下面我們看看javascript里裝飾者模式
1.模擬傳統(tǒng)面向?qū)ο笳Z言的裝飾者模式裝飾者模式將一個對象嵌入到另一個對象之中,實際上相當(dāng)于這個對象被另一個對像包裝起來,形成一條包裝鏈。請求隨著這條包裝鏈依次傳遞到所有的對象,每個對象都有處理這條請求的機會。
var Plan1 = { fire: function () { console.log("發(fā)射普通的子彈") } } var missileDecorator = function () { console.log("發(fā)射導(dǎo)彈!"); } var fire = Plan1.fire Plan1.fire = function () { fire() missileDecorator() }; Plan1.fire()
裝飾函數(shù), 很多時候我們在修改別人的代碼時,會改動window.onload里的東西,但是直接修改別人的代碼太多,容易出錯,所以我們可以用下面這個方式來修改
// 別人的代碼 window.onload = function () { console.log("別人的代碼") } var _onload = window.onload || function() {} window.onload = function(){ _onload() console.log("自己的代碼") }
通過以上方式,我們可以很輕松的在onload的函數(shù)里插入自己的方法,而不會影響別人的方法
面向切面的AOP編程,因為函數(shù)在js里是一等對象,所以,我們可以給函數(shù)原型添加我們需要執(zhí)行的方法
Function.prototype.before = function (fn) { var self = this // 原函數(shù) return function () { // 返回一個新函數(shù),該函數(shù)先執(zhí)行fn函數(shù),再執(zhí)行原函數(shù) fn.apply(this, arguments) // fn函數(shù) return self.apply(this, arguments) // 原函數(shù) } } var f1 = function () { console.log(2) } var f1 = f1.before(function () { console.log(1) }) f1() // 1 2
仔細(xì)觀察上面的方法,我們可以看到,fn函數(shù)和原函數(shù)使用的都是一個arguments,所以,我們可以在fn函數(shù)里修改arguments,使原函數(shù)直接使用修改過的arguments,例如
var obj = { a: "a" } var f1 = function (params) { console.log(params) } var f1 = f1.before(function (params) { params.b = "b" // 給obj添加b屬性 }) f1(obj) // {a: "a", b: "b"}
我們添加了一個obj,可以看到,before里,給obj添加了一個b屬性,因為before里的fn和f1用的是同一個參數(shù)總結(jié)
裝飾者模式的作用就是為了在不影響原對象功能的情況下,動態(tài)的加入某些行為,從而使對象方法更靈活多變,易于維護
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/94071.html
摘要:聲明這個系列為閱讀設(shè)計模式與開發(fā)實踐曾探著一書的讀書筆記裝飾者模式的定義裝飾者模式能夠在不改變對象自身的基礎(chǔ)上,在程序運行期間給對像動態(tài)的添加職責(zé)。與繼承相比,裝飾者是一種更輕便靈活的做法。裝飾者模式的作用就是為對象動態(tài)的加入某些行為。 聲明:這個系列為閱讀《JavaScript設(shè)計模式與開發(fā)實踐》 ----曾探@著一書的讀書筆記 裝飾者模式的定義: 裝飾者(decorator)模式能...
摘要:下裝飾者的實現(xiàn)了解了裝飾者模式和的概念之后,我們寫一段能夠兼容的代碼來實現(xiàn)裝飾者模式原函數(shù)拍照片定義函數(shù)裝飾函數(shù)加濾鏡用裝飾函數(shù)裝飾原函數(shù)這樣我們就實現(xiàn)了抽離拍照與濾鏡邏輯,如果以后需要自動上傳功能,也可以通過函數(shù)來添加。 showImg(https://segmentfault.com/img/bVbueyz?w=852&h=356); 什么是裝飾者模式 當(dāng)我們拍了一張照片準(zhǔn)備發(fā)朋友...
摘要:裝飾者模式定義裝飾者模式能夠在不改變對象自身的基礎(chǔ)上,在程序運行期間給對像動態(tài)的添加職責(zé)。與繼承相比,裝飾者是一種更輕便靈活的做法。 裝飾者模式 定義 : 裝飾者(decorator)模式能夠在不改變對象自身的基礎(chǔ)上,在程序運行期間給對像動態(tài)的添加職責(zé)。與繼承相比,裝飾者是一種更輕便靈活的做法。 在不改變對象自身的基礎(chǔ)上,在程序運行期間給對象動態(tài)地添加一些額外職責(zé) 特點 : 可以動態(tài)的...
摘要:裝飾者模式裝飾者模式提供比繼承更有彈性的替代方案。裝飾者用于包裝同接口的對象,用于通過重載方法的形式添加新功能,該模式可以在被裝飾者的前面或后面加上自己的行為以達(dá)到特定的目的。簡單的理解給對象動態(tài)添加職責(zé)的方式稱為裝飾著模式。 裝飾者模式 裝飾者模式提供比繼承更有彈性的替代方案。裝飾者用于包裝同接口的對象,用于通過重載方法的形式添加新功能,該模式可以在被裝飾者的前面或后面加上自己的行為...
摘要:單體模式有以下優(yōu)點用來劃分命名空間,減少全局變量數(shù)量。通常我們使用操作符創(chuàng)建單體模式的三種選擇,讓構(gòu)造函數(shù)總返回最初的對象使用全局對象來存儲該實例不推薦,容易全局污染。實現(xiàn)該工廠模式并不困難,主要是要找到能夠穿件所需類型對象的構(gòu)造函數(shù)。 介紹 最近開始給自己每周訂個學(xué)習(xí)任務(wù),學(xué)習(xí)結(jié)果反饋為一篇文章的輸出,做好學(xué)習(xí)記錄。 這一周(02.25-03.03)我定的目標(biāo)是《JavaScri...
閱讀 3721·2021-10-18 13:34
閱讀 2415·2021-08-11 11:15
閱讀 1209·2019-08-30 15:44
閱讀 702·2019-08-26 10:32
閱讀 998·2019-08-26 10:13
閱讀 2072·2019-08-23 18:36
閱讀 1784·2019-08-23 18:35
閱讀 532·2019-08-23 17:10