意圖:動態地給乙個物件新增一些額外的職責。就增加功能來說,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...