假定已經有三個類a , b , c
b類和c類繼承於a類,現在我們要擴充套件b和c的功能,新增的功能風別為method1() , method2(), method3()表示。類b和類c的有些子類只新增乙個功能,有得新類增加兩個功能,有的類會要增加三個方法,這樣最多會從b繼承出7個子類。
可見採用繼承的方式來擴充套件類b和類c的功能,會導致子類的數目急劇增加。而且存在重複**。
為了減少類的數目,並提高**的重用性,可以採用裝飾器設計模式。在這個模式中,把需要擴充套件的功能放在裝飾器類中,裝飾器類繼承a,因此擁有類a的介面。在裝飾器類中還包裝了乙個類a的例項,因此裝飾器不僅擁有類a的例項的功能,還能擴充套件類a的例項的功能。每個裝飾器類都有如下形式的建構函式。
decorator(a a)——引數a指定需要被裝飾的例項。
設計模式 裝飾器模式
裝飾器模式 decorator pattern 允許向乙個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的乙個包裝。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。public inte ce playe...
設計模式 裝飾器模式
裝飾者模式的應用場景 裝飾者模式 decorator pattern 是指在不改變原有物件的基礎之上,將功能附加到物件上,提供了比繼承更有彈性的替代方案 擴充套件原有物件的功能 屬於結構型模式。裝飾者模式在我們生活中應用也比較多如給煎餅加雞蛋 給蛋糕加上一些水果 給房子裝修等,為物件擴充套件一些額外...
設計模式 裝飾器模式
定義 裝飾模式可以動態的給乙個物件增加一些額外的功能 增強功能 相比於繼承,裝飾模式能對不支援繼承的類進行增強 並且比繼承更靈活,不需要生成大量的子類。角色 實現 public abstract class house public abstract void sleep public class ...