標籤:rac func 不用 prot code sso 子類 產生 src
裝飾者模式:在不必改變原類檔案和使用繼承的情況下,動態地擴充一個對象的功能。它是通過建立一個封裝對象,也就是裝飾來包裹真實的對象
裝飾模式的特點(1) 裝飾對象和真實對象有同樣的介面。這樣client對象就能以和真實對象同樣的方式和裝飾對象互動。
(2) 裝飾對象包括一個真實對象的引用(reference)
(3) 裝飾對象接受全部來自client的請求。
它把這些請求轉寄給真實的對象。
(4) 裝飾對象能夠在轉寄這些請求曾經或以後添加一些附加功能。這樣就確保了在執行時。不用改動給定對象的結構就能夠在外部添加附加的功能。在物件導向的設計中。一般是通過繼承來實現對給定類的功能擴充。
適用性下面情況使用Decorator模式
1. 須要擴充一個類的功能,或給一個類加入附加職責。
2. 須要動態給一個對象加入功能,這些功能能夠再動態撤銷。
3. 須要添加由一些準系統的排列組合而產生的很大量的功能。從而使繼承關係變的不現實。
4. 當不能採用產生子類的方法進行擴充時。一種情況是,可能有大量獨立的擴充,為支援每一種組合將產生大量的子類,使得子類數目呈爆炸性增長。
還有一種情況可能是由於類定義被隱藏,或類定義不能用於產生子類。
var Door = function() { } Door.prototype.open = function() { alert("開啟門"); } var Decorator = function(decorator) { this.decorator = decorator; } Decorator.prototype.open = function() { this.decorator.open(); } var door = new Door(); var decorator = new Decorator(door); decorator = new Decorator(decorator); decorator.open();
【JS設計模式】裝飾者模式