裝飾者(Decorator)模式

2021-08-21 00:10:28 字數 1108 閱讀 2555

裝飾者模式是允許向乙個新物件新增新的功能,但又不改變其結構。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。

就增加功能來說,裝飾器模式相比生成子類更為靈活。

例子:

如果我們去咖啡店,有一種咖啡,該咖啡可以加糖,牛奶,奶泡等等,如果我們需要加糖和牛奶,常規的寫法就是分別繼承糖的介面和牛奶的介面,然後實現。但是如果新增種類很多的話,就會形成大量的繼承類,給維護造成很大的麻煩。這就需要繼承類來為其新增新功能了。

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.組合...