裝飾者模式就是透明把物件包裝在具有同樣介面的另一物件中。相對於建立子類來說,裝飾者是一種友好的選擇。
裝飾者用於給物件增加功能,可以創造大量的子類。
例如:
function extend(subclass, superclass);
f.prototype = superclass.prototype;
subclass.prototype = new f();
subclass.prototype.constructor = subclass;
subclass.superclass = superclass.prototype;
if(superclass.prototype.constructor == object.prototype.constructor)
}//組建類 基類
function bicycle(){}
bicycle.prototype = ,
wash:function(){},
ride:function(){},
repair:function(){},
getprice:function()
};//裝飾者類 實現與組建類同樣的介面
var bicycledecorator = function(bicycle)
bicycledecorator.prototype = ,
wash:function(),
ride:function(),
repair:function(),
getprice:function()
};//我們需要有兩車燈的自行車
var headlightbicycle = function(bicycle)
extend(headlightbicycle, bicycledecorator);
headlightbicycle.prototype.assemble = function()
headlightbicycle.prototype.getprice = function()
//我們需要有乙個鈴鐺的自行車
var basketbicycle = function(bicycle)
extend(basketbicycle, bicycledecorator);
basketbicycle.prototype.assemble = function()
basketbicycle.prototype.getprice = function()
//擁有兩個車燈的自行車
var bicycle = new bicycle();
alert(bicycle.getprice());
var mybicycle1 = new headlightbicycle(bicycle);
alert(mybicycle1.assemble());
alert(mybicycle1.getprice());
//在兩個車燈的前提下,增加乙個鈴鐺
var mybicycle2 = new basketbicycle(mybicycle1);
alert(mybicycle2.assemble());
alert(mybicycle2.getprice());
我們可以動態的應用裝飾者,創造出具有特性的物件。
裝飾者介面的角色:
1、說明裝飾者必須實現的方法。
2、裝飾者物件與組建能夠互換使用。
裝飾者模式與組合模式的比較:
1、都是用來包裝物件,在組合模式中稱之為子物件,裝飾者模式中稱之為元件。
2、組合模式是一種結構模式,用於將眾多子物件組織為乙個整體,將大批物件當作乙個整體物件處理,作為乙個組織層次結構的樹,不會修改方法的呼叫,而是將組合物件沿著子物件鏈向下傳遞,最終落在葉物件中。
3、裝飾者模式是結構型模式,不是用於組織物件,而是在不修改現有物件的前提下為其增加新的職責。目的是用於對方法的修改。組合物件不修改方法呼叫,目的是在於子物件。然而裝飾者是修改方法,子物件只能有乙個。
裝飾者修改組建的方式
1、方法之後新增行為
先呼叫元件的方法,然後在實施附加的方法。
2、在方法之前新增行為
修改行為放生在執行元件之前。
3、替換方法
對方法進行整體替換,元件的方法將不會被呼叫。需注意的是這個裝飾者的順序至少要放到其餘同樣方法後應用。
4、新增新方法
工廠模式適合建立裝飾對像。
函式裝飾者
function uppercasedecorator(func)
}function getdate()
getdatecaps = uppercasedecorator(getdate);
alert(getdate());
alert(getdatecaps());
這樣 uppercasedecorator也是對getdate函式的裝飾
適用場合
為類新增特性與職責,如果派生子類不實際的話,就要用到裝飾者模式。
為物件新增特性,而不想修改物件,用到裝飾者模式。
JS設計模式 裝飾者模式
昨天又學了白賀翔老師的js設計模式 裝飾者模式,下面來分享一下它的實現哈。裝飾者模式 就是在保證不改變原始物件的基礎上,新增新的方法或請求.裝飾者模式兩個要求 1.實現同一批介面 2.需要含有子類 介面類的實現 var carinte ce new bh.inte ce carinte ce get...
js設計模式 裝飾者模式
裝飾者模式可以動態地給乙個物件新增一些額外的職責。就增加功能來說,裝飾者模式比通過繼承生成子類更為靈活。下面通過乙個例子來詳細的介紹一下。我們銷售一台電腦,每個電腦都是乙個新的computer物件,它都有乙個price屬性來表示 並且可以通過它的getprice方法來得到它的 var compute...
JS設計模式 裝飾者模式
裝飾者模式 在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件 1 裝飾物件和真實物件有同樣的介面。這樣client物件就能以和真實物件同樣的方式和裝飾物件互動。2 裝飾物件包括乙個真實物件的引用 reference 3 裝飾物件...