設計模式之裝飾者模式

2021-08-31 09:28:59 字數 1529 閱讀 6353

在不改變元物件的基礎上,通過對其進行包裝拓展(新增屬性方法),裝飾者模式能夠在不改變物件自身的基礎上,在程式執行期間動態物件動態的新增職責。與繼承相比,裝飾者是一種更輕便靈活的做法。可以當指令碼執行時,在子類中增加行為會影響原有類所有的例項,而裝飾者卻不然。取而代之的是它能給不同物件各自新增新行為和屬性。

接著工廠方法模式說,建立好了飛機工廠,然後去裝修它

//工廠方法模式

function planefactor()

//集合所有裝飾方法

planefactor.prototype.decorators = ,

eattwolife(obj),

eatshrinklife(obj)

}//蒐集對某物件的裝飾描述

planefactor.prototype.decorate= function(decorator)

//讓裝飾方法作用在改物件身上

planefactor.prototype.update = function()

}//清除

planefactor.prototype.empty = function()

//刪除

planefactor.prototype.remove = function (type) )

}//子類工廠都可以使用的公共方法

planefactor.prototype.touch = function ()

}planefactor.prototype.die = function()

//建立物件的介面

planefactor.create = function (type)

//繼承

if (planefactor.prototype[type].prototype.__proto__ != planefactor.prototype)

var arg = .slice.call(arguments,1)

var newplane = new planefactor.prototype[type](...arg)

return newplane;

}//真正定義子類工廠

planefactor.prototype.smallplane = function (x, y)

planefactor.prototype.bigplane = function (x,y)

planefactor.prototype.atackplane = function (x,y)

}var a= planefactor.create('atackplane',10,20)

var b= planefactor.create('bigplane',20,20)

var c= planefactor.create('smallplane',40,20)

// 裝飾者模式

a.decorate('eatonelife')

a.decorate('eattwolife')

b.decorate('eattwolife')

設計模式之 裝飾者模式

一 裝飾者模式 裝飾者模式又稱為包裝模式。動態地給乙個物件增加新的職責。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者模式顧名思義就是對乙個物件進行裝飾,具體怎樣裝飾呢?那就是給這個物件不斷的增加職責方法。給乙個物件增加方法不簡單啊,用繼承或者直接在物件的類中增加方法。如果我們要對自...

設計模式之裝飾者模式

此模式動態將職責附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更具彈性的代替方案,以一圖一概括。要點1 裝飾者和被裝飾物件有相同的超型別。2 可以用乙個或多個裝飾者包裝乙個物件。3 裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。4 物件可以在任何時候被裝飾,所以可...

設計模式之裝飾者模式

public abstract class beverage 返回當前飲品的 public abstract double cost 為了讓condiment decorator 調料裝飾者 能夠取代beverage,所以將它擴充套件至beverage類 public abstract class ...