JS設計模式

JS設計模式

發佈者訂閱模式

這種設計模式能夠大大下降程序模塊之間的耦合度,便於更加靈活的擴展和維護。segmentfault

中介者模式

中介者模式經過統一接口來維護一對多關係,且通訊者之間不須要知道彼此之間的關係,只須要約定好API便可。設計模式

如下狀況下能夠考慮使用中介者模式:安全

  • 一組定義良好的對象,如今要進行復雜的相互通訊。bash

  • 想經過一箇中間類來封裝多個類中的行爲,而又不想生成太多的子類。函數

代理模式

爲其餘對象提供一種代理以控制對這個對象的訪問。 代理模式使得代理對象控制具體對象的引用。代理幾乎能夠是任何對象:文件,資源,內存中的對象,或者是一些難以複製的東西。ui

主要解決:在直接訪問對象時帶來的問題,好比說:要訪問的對象在遠程的機器上。在面向對象系統中,有些對象因爲某些緣由(好比對象建立開銷很大,或者某些操做須要安全控制,或者須要進程外的訪問),直接訪問會給使用者或者系統結構帶來不少麻煩,咱們能夠在訪問此對象時加上一個對此對象的訪問層。spa

單例模式

保證一個類只有一個實例,並提供一個訪問它的全局訪問點(調用一個類,任什麼時候候返回的都是同一個實例)。設計

實現方法:使用一個變量來標誌當前是否已經爲某個類建立過對象,若是建立了,則在下一次獲取該類的實例時,直接返回以前建立的對象,不然就建立一個對象。代理

工廠模式

假如咱們想在網頁面裏插入一些元素,而這些元素類型不固定,多是圖片、連接、文本,根據工廠模式的定義,在工廠模式下,工廠函數只需接受咱們要建立的元素的類型,其餘的工廠函數幫咱們處理。code

裝飾者模式

裝飾者(decorator)模式可以在不改變對象自身的基礎上,在程序運行期間給對像動態的添加職責(方法或屬性)。與繼承相比,裝飾者是一種更輕便靈活的作法。

ES7裝飾器
function isAnimal(target) {
    target.isAnimal = true
    return target
}

// 裝飾器
@isAnimal
class Cat {
    // ...
}
console.log(Cat.isAnimal)    // true



做用於類屬性的裝飾器:

function readonly(target, name, descriptor) {
    discriptor.writable = false
    return discriptor
}

class Cat {
    @readonly
    say() {
        console.log("meow ~")
    }
}

var kitty = new Cat()
kitty.say = function() {
    console.log("woof !")
}
kitty.say()    // meow ~
複製代碼

僅用於我的整理,參考:

JS設計模式

相關文章
相關標籤/搜索