設計模式 裝飾器模式

2022-08-28 22:06:21 字數 1364 閱讀 5025

裝飾器(decorator)模式指在不改變現有物件結構的情況下,動態地給該物件增加一些職責(即增加其額外功能)的模式,它屬於物件結構型模式。採用裝飾模式擴充套件物件的功能比採用繼承方式更加靈活;可以設計出多個不同的具體裝飾類,創造出多個不同行為的組合。但是裝飾模式增加了許多子類,如果過度使用會使程式變得很複雜。

裝飾器模式的角色如下:

裝飾器模式使用的典型就是io流了,前面介面卡模式我們說到過io流使用了介面卡模式,用於位元組流轉換到字元流;裝飾器模式在io流中也是乙個很經典的使用。其使用的地方就是給流裝飾上快取。以輸入流為例,

bufferedinputstream就是對fileinputstream的裝飾,我們看一下這段**:

string file = "out.txt";    

inputstream ins = new fileinputstream(file);

bufferedinputstream bufin= new bufferedinputstream(ins);

int b;

while((b=bufin.read())!=-1)

bufferedinputstream原始碼:

public class bufferedinputstream extends filterinputstream 

......

public synchronized int read(byte b, int off, int len) throws ioexception

}

它繼承了filterinputstream,而filterinputstream繼承了inputstreamfileinputstream也繼承了inputstream。 所以這裡的角色關係為inputstream是頂層類(介面),fileinputstream是被裝飾類,bufferedinputstream是裝飾類。bufferedinputstreamfileinputstreaminputstream繼承過來的方法進行了裝飾,這裡的。filterinputstream佔據的角色是裝飾器抽象類,但其並不是個抽象類;這並不影響我們對其模式的理解。

最近貨更新的有點少,我會努力

設計模式 裝飾器模式

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

設計模式 裝飾器模式

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

設計模式 裝飾器模式

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