[Javascript] 裝飾器Decorator

Decorator:從原理到實踐,我一點都不虛
https://github.com/Nealyang/PersonalBlog/issues/35

ES7 Decorator 裝飾者模式
http://taobaofed.org/blog/2015/11/16/es7-decorator/

Decorators in ES7
http://www.liuhaihua.cn/archives/115548.html

ES7 Decorator 與函數變換
https://www.h5jun.com/post/decorator-functional.html

ES7 的 decorator 概念是從 Python 借來的,在 Python 裡,decorator 實際上是一個 wrapper,它作用於一個目標函數,對這個目標函數做一些額外的操作,然後返回一個新的函數。

Decorator裝飾模式和適配器模式都是 包裝模式 (Wrapper Pattern),它們都是通過封裝其他物件達到設計的目的的,但是它們的形態有很大區別。

適配器模式我們使用的場景比較多,比如連接不同資料庫的情況,你需要包裝現有的模組介面,從而使之適配資料庫 —— 好比你手機使用轉介面來適配插座那樣。

裝飾模式不一樣,僅僅包裝現有的模組,使之 “更加華麗” ,並不會影響原有介面的功能 —— 好比你給手機添加一個外殼罷了,並不影響手機原有的通話、充電等功能。

裝飾模式經典的應用是 AOP 程式設計,比如“日誌系統”,日誌系統的作用是記錄系統的行為操作,它在不影響原有系統的功能的基礎上增加記錄環節 —— 好比你佩戴了一個智慧手環,並不影響你日常的作息起居,但你現在卻有了自己每天的行為記錄。

更加抽象的理解,可以理解為給資料流程做一層filter,因此 AOP 的典型應用包括 安全檢查、緩存、調試、持久化等等。可參考Spring aop 原理及各種應用場景 。


#Javascript, Decorator, ES7, 裝飾器

留言