裝飾者模式:在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件
(1) 裝飾物件和真實物件有同樣的介面。這樣client物件就能以和真實物件同樣的方式和裝飾物件互動。
(2) 裝飾物件包括乙個真實物件的引用(reference)
(3) 裝飾物件接受全部來自client的請求。
它把這些請求**給真實的物件。
(4) 裝飾物件能夠在**這些請求曾經或以後新增一些附加功能。這樣就確保了在執行時。不用改動給定物件的結構就能夠在外部新增附加的功能。在物件導向的設計中。一般是通過繼承來實現對給定類的功能擴充套件。
下面情況使用decorator模式
1. 須要擴充套件乙個類的功能,或給乙個類加入附加職責。
2. 須要動態的給乙個物件加入功能,這些功能能夠再動態的撤銷。
3. 須要新增由一些基本功能的排列組合而產生的很大量的功能。從而使繼承關係變的不現實。
4. 當不能採用生成子類的方法進行擴充時。一種情況是,可能有大量獨立的擴充套件,為支援每一種組合將產生大量的子類,使得子類數目呈**性增長。
還有一種情況可能是由於類定義被隱藏,或類定義不能用於生成子類。
var door = function()door.prototype.open = function()
var decorator = function(decorator)
decorator.prototype.open = function()
var door = new door();
var decorator = new decorator(door);
decorator = new decorator(decorator);
decorator.open();
JS設計模式 裝飾者模式
昨天又學了白賀翔老師的js設計模式 裝飾者模式,下面來分享一下它的實現哈。裝飾者模式 就是在保證不改變原始物件的基礎上,新增新的方法或請求.裝飾者模式兩個要求 1.實現同一批介面 2.需要含有子類 介面類的實現 var carinte ce new bh.inte ce carinte ce get...
js設計模式 裝飾者模式
裝飾者模式可以動態地給乙個物件新增一些額外的職責。就增加功能來說,裝飾者模式比通過繼承生成子類更為靈活。下面通過乙個例子來詳細的介紹一下。我們銷售一台電腦,每個電腦都是乙個新的computer物件,它都有乙個price屬性來表示 並且可以通過它的getprice方法來得到它的 var compute...
JS設計模式之裝飾者模式
裝飾者模式就是透明把物件包裝在具有同樣介面的另一物件中。相對於建立子類來說,裝飾者是一種友好的選擇。裝飾者用於給物件增加功能,可以創造大量的子類。例如 function extend subclass,superclass f.prototype superclass.prototype subcl...