設計模式 裝飾器模式

2021-10-02 14:46:21 字數 1121 閱讀 9208

裝飾器模式能夠在不改 變物件自身的基礎上,在程式執行期間給物件 動態地新增職責。遵循開閉原則(應該對於擴充套件是開放的,對修改是關閉的,即實體應當通過擴充套件實現變化,而不是修改**實現變化),利用繼承和組合的方式解耦物件間的關係。

以常見的案列咖啡為例。在不考慮設計模式的時候,按照傳統的思路,我們會寫乙個父類表示純咖啡,如果不能滿足需要,就在新增乙個加牛奶的咖啡的類去繼承咖啡父類,如果還想要加糖,那麼在建立乙個加糖的類繼承父類,這樣雖然解決了問題,但是子類膨脹,不利於管理。

以裝飾器模式進行開發的話,需要先定乙個頂層的介面,對咖啡的行為進行規範

public inte***ce coffee
由於咖啡中需要加各種材料,獨把它抽象出來,將其設計成乙個抽象類,讓子類去新增材料。

public abstract class coffeeabstractor implements coffee 

@override

public string getname()

@override

public double getprice()

}

純咖啡

public class onlycoffee implements coffee

@override

public double getprice()

}

新增牛奶:

public class milkcoffee extends coffeeabstractor 

@override

public string getname()

@override

public double getprice()

}

新增糖:

public class sugarcoffee extends coffeeabstractor  

@override

public string getname()

@override

public double getprice()

}

最後的測試:

public static void main(string args)

缺點:

設計模式 裝飾器模式

裝飾器模式 decorator pattern 允許向乙個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的乙個包裝。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。public inte ce playe...

設計模式 裝飾器模式

裝飾者模式的應用場景 裝飾者模式 decorator pattern 是指在不改變原有物件的基礎之上,將功能附加到物件上,提供了比繼承更有彈性的替代方案 擴充套件原有物件的功能 屬於結構型模式。裝飾者模式在我們生活中應用也比較多如給煎餅加雞蛋 給蛋糕加上一些水果 給房子裝修等,為物件擴充套件一些額外...

設計模式 裝飾器模式

定義 裝飾模式可以動態的給乙個物件增加一些額外的功能 增強功能 相比於繼承,裝飾模式能對不支援繼承的類進行增強 並且比繼承更靈活,不需要生成大量的子類。角色 實現 public abstract class house public abstract void sleep public class ...