標籤: 設計模式javascript
裝飾者模式,其中的重點天然就在「裝飾」這兩個字上面,在平常生活中不少東西都是須要裝飾的,裝飾的目的是爲了原來的物品更加的好看,或者是加個裝飾讓物品更加實用,裝飾通常都可以爲原來的物品添加一些新的功能,而添加的裝飾在添加新的功能的時候也不會改變原來的物品。前端
那麼在編程中的裝飾其實和生活之中的裝飾也是一個道理。因此裝飾者模式的一個基本的原則就是在不改變對象自身的基礎上,在程序運行期間給對象動態的添加職責,可以使得功能變得可插拔更加的靈活。java
下面經過一個簡單的例子來體會一下裝飾者模式:web
假設如今咱們在編寫一個飛機大戰的遊戲,隨着等級的上升咱們的飛機功能不斷的加強,一開始只能發射子彈,二級以後能夠發射導彈了,三級以後能夠發送原子彈了。編程
首先實現一個飛機類:小程序
var Plane = function () {}
Plane.prototype.fire = function () {
console.log('發射普通子彈')
}
接下來添加兩個裝飾類,分別實現發射原子彈和導彈:微信小程序
var MissileDecorator = function (plane) {
this.plane = plane
}
MissileDecorator.prototype.fire = function () {
this.plane.fire()
console.log('發射導彈')
}
var AtomDecorator = function (plane) {
this.plane = plane
}
AtomDecorator.prototype.fire = function () {
this.plane.fire()
console.log('發射原子彈')
}
導彈類和原子彈類的構造函數都接受參數plane對象,而且保留這個參數,在執行他們自身的操做以外還執行plane的fire方法。設計模式
這樣子每被裝飾一次以後原來的類就新增了一個功能,並且原始的類也沒有被改變。微信
使用:框架
var plane = new Plane();
plane = new MissileDecorator( plane );
plane = new AtomDecorator( plane );
plane.fire();
// 分別輸出: 發射普通子彈、發射導彈、發射原子彈
從上面的例子能夠看到,每通過一次裝飾就至關於在原來的類外部包裝了一層對象,造成了一條包裝鏈,請求隨着這條包裝鏈依次傳遞到全部的對象,每一個對象都會有機會來處理這個請求。
做者簡介:李成文,蘆葦科技web前端開發工程師,擅長網站建設、公衆號開發、微信小程序開發、小遊戲、公衆號開發,專一於前端領域框架、交互設計、圖像繪製、數據分析等研究,訪問 www.talkmoney.cn 瞭解更多。