裝飾器模式(decorator pattern)允許向乙個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的乙個包裝。
這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。
意圖:動態地給乙個物件新增一些額外的職責。就增加功能來說,裝飾器模式相比生成子類更為靈活。
主要解決:一般的,我們為了擴充套件乙個類經常使用繼承方式實現,由於繼承為類引入靜態特徵,並且隨著擴充套件功能的增多,子類會很膨脹。
python有裝飾器,可以較好理解這種模式的用法。 比如統計函式的執行時間等。
將建立乙個 shape 介面和實現了 shape 介面的實體類。然後我們建立乙個實現了 shape 介面的抽象裝飾類 shapedecorator,並把 shape 物件作為它的例項變數。
redshapedecorator 是實現了 shapedecorator 的實體類。
decoratorpatterndemo,我們的演示類使用 redshapedecorator 來裝飾 shape 物件。
**參考:
public abstract class shapedecorator implements shape
public void draw()
}public class redshapedecorator extends shapedecorator
@override
public void draw()
private void setredborder(shape decoratedshape)
}shape circle = new circle();
shape redcircle = new redshapedecorator(new circle());
裝飾器和之前**模式非常像,二者都是持有乙個原始物件,並且都實現了物件的介面,從**角度基本上很難區分。 說下個人理解吧。 是否硬需求:首先**模式是硬功能驅動性質的,比如許可權控制或者資源優化。裝飾器就不是,只是可用可不用,典型統計**執行時間等。 是否專一性:**是為特定用途定製的,只能用在特定場景。裝飾器側重通用性質,可以裝飾其他物件。 能力變化:**側重一種控制,或限制,或優化(隱含的效率優化非功能優化),或功能減少(感覺上)。裝飾是功能增加和擴充套件,之前的功能原樣保留,額外增加了新的,功能擴充。 裝飾器相對更弱耦合些。 設計模式 裝飾器模式
裝飾器模式 decorator pattern 允許向乙個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的乙個包裝。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。public inte ce playe...
設計模式 裝飾器模式
裝飾者模式的應用場景 裝飾者模式 decorator pattern 是指在不改變原有物件的基礎之上,將功能附加到物件上,提供了比繼承更有彈性的替代方案 擴充套件原有物件的功能 屬於結構型模式。裝飾者模式在我們生活中應用也比較多如給煎餅加雞蛋 給蛋糕加上一些水果 給房子裝修等,為物件擴充套件一些額外...
設計模式 裝飾器模式
定義 裝飾模式可以動態的給乙個物件增加一些額外的功能 增強功能 相比於繼承,裝飾模式能對不支援繼承的類進行增強 並且比繼承更靈活,不需要生成大量的子類。角色 實現 public abstract class house public abstract void sleep public class ...