java裝飾者模式

2021-09-01 13:30:11 字數 1819 閱讀 1715

意圖:動態地給乙個物件新增一些額外的職責。就增加功能來說,decorator模式相比生成子類更為靈活。

因為參考網上說法都不太一樣,故按照我理解的意思描述下裝飾者模式,以希望給後來者一些稍微的指引:

通俗地說就是包裝物件,在不影響其他物件的情況下,動態,透明地給單個物件新增一些功能

裝飾模式就是給乙個物件增加一些新的功能,而且是動態的,要求裝飾物件和被裝飾物件實現同乙個介面,裝飾物件持有被裝飾物件的例項,如圖:

需要幾個部件:

1介面,或者抽象類

2被裝飾者實現該介面,或者繼承該抽象類

3裝飾者實現該介面,或者繼承該抽象類,定義被裝飾物件的例項,對該例項進行進行包裝

以常見的io介面類來說

抽象類inputstream

public abstract class inputstream implements closeable
抽象類inputstream的子類fileinputstream,被裝飾者

public  class fileinputstream extends inputstream
抽象類inputstream的子類filterinputstream,裝飾者

public  class filterinputstream extends inputstream 

protected volatile inputstream in;

//定義抽象類inputstream的例項,下行的構造方法中把這個例項傳過來

protected filterinputstream(inputstream in)

filterinputstream的子類bufferedinputstream,繼承了父類的裝飾功能

public class bufferedinputstream extends filterinputstream
所以會有這樣的語句:bufferedinputstream對inputstream的例項進行包裝

bufferedinputstream bis=new bufferedinputstream(new fileinputstream("g:\\x269all.rmvb"));

bufferedoutputstream bos=new bufferedoutputstream(new fileoutputstream("g:\\x256.rmvb"));

自定義包裝類:

介面:

public inte***ce drinkdecorator
實現類,被包裝者

public class coffee implements drinkdecorator 

}

實現類,包裝者:

public class sweetcoffee implements drinkdecorator 

public void add()

}

測試類:

public class decoratortest 

}out:

add some coffee

add some water

add some sugar

this is a sweet coffee

java裝飾者模式

1 定義 動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。2 描述 由 抽象構件角色 定義乙個抽象介面,來規範準備附加功能的類 具體構件角色 將要被附加功能的類,實現抽象構件角色介面 抽象裝飾者角色 持有對具體構件角色的引用並定義與抽象構件角色一致的介面 和 具體裝...

java 裝飾者模式

1.裝飾者模式 思想 可以通過裝飾 對原來的功能進行公升級 例如 bufferedoutputstream 傳入的引數是 fileoutputstream 相當於把fileoutputstream裝飾了 裝飾後 功能得到提公升 寫入效率提高 裝飾者模式流程 1 把被裝飾者寫成成員變數 2 構造方法中...

Java 裝飾者模式

裝飾者模式 課題 星巴茲咖啡 beverage 飲料 condiment 調料 開發 關閉原則 類應該對擴充套件開放,對修改關閉。定義裝飾者模式 裝飾者模式 動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。飲料抽象類 public abstract class be...