裝飾者模式?

什麼是裝飾者模式?

裝飾者模式,其中的重點天然就在「裝飾」這兩個字上面,在平常生活中不少東西都是須要裝飾的,裝飾的目的是爲了原來的物品更加的好看,或者是加個裝飾讓物品更加實用,裝飾通常都可以爲原來的物品添加一些新的功能,而添加的裝飾在添加新的功能的時候也不會改變原來的物品。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 瞭解更多。
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息