裝飾者模式是允許向乙個新物件新增新的功能,但又不改變其結構。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。
就增加功能來說,裝飾器模式相比生成子類更為靈活。
例子:
如果我們去咖啡店,有一種咖啡,該咖啡可以加糖,牛奶,奶泡等等,如果我們需要加糖和牛奶,常規的寫法就是分別繼承糖的介面和牛奶的介面,然後實現。但是如果新增種類很多的話,就會形成大量的繼承類,給維護造成很大的麻煩。這就需要繼承類來為其新增新功能了。
coffee介面
public
abstract
class coffee
原始咖啡
public
class
******coffee
extends
coffee
@override
public string getname()
}
decorator類
public
abstract
class
decorator
extends
coffee
}
milkdecorator類
public
class
milkdecorator
extends
decorator
@override
public
intgetprice()
@override
public string getname()
測試
public
class test
}
如果你想加糖可以
coffee = new sugardecorator(coffee);
等等 這樣我們就可以方便的為咖啡提供各種配料了。
裝飾者模式和**模式的區別
兩者都可以在不改變原始類的結構的前提下,為新物件提供新功能。但是兩者也是有區別的:
裝飾者模式decorator
設計原則 開放 關閉原則,對擴充套件開放,對修改封閉 多用組合,少用繼承 針對介面程式設計,不針對實現程式設計 為互動物件之間的松耦合設計而努力 類圖待補充 示例 飲料銷售系統 主體飲料 coffe 輔助調料 mocha,soy,whip。輔助調料價位都不一樣,當輔助調料和主飲料不同搭配時,最終飲料...
裝飾者模式 Decorator
1 作用 動態的給物件增加執行的業務,不受數量限制。可以代替子類,同時避免子類與父類的高耦合。增加靈活性。2 構成 2.1 裝飾者抽象類 decorator 可以是介面 最終生成乙個指向被裝飾物件基類 component 例項的引用,並定義乙個與被裝飾物件基類 component 介面一致的介面。通...
裝飾者模式 Decorator
裝飾者模式 動態地將責任附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活 要點1.繼承屬於擴充套件形式之一,但不見得是達到彈性設計的最佳方式 2.應該允許行為可以被擴充套件,而無須修改現有的 3.組合...