Java設計模式----裝飾者模式


裝飾者模式介紹

裝飾模式又名包裝(Wrapper)模式。裝飾模式以對客戶端透明的方式擴展對象的功能,是繼承關系的一個替代方案。就增加功能來說,Decorator模式比生成子類更為靈活。 
裝飾者模式的類圖結構如下所示 

裝飾者模式中類或接口的作用:

抽象構件(Component)角色:給出一個抽象接口,以規范准備接收附加責任的對象。
具體構件(ConcreteComponent)角色:定義一個將要接收附加責任的類。
裝飾(Decorator)角色:持有一個構件(Component)對象的實例,並定義一個與抽象構件接口一致的接口。
具體裝飾(ConcreteDecorator)角色:負責給構件對象“貼上”附加的責任。

 

下面給出裝飾者模式的示例代碼:

第一步:定義一個抽象接口,作為被裝飾的對象基類

第二部:定義被裝飾的具體對象,實現上面的接口

第三部:定義一個裝飾者的抽象類,要與被裝飾者具體對象實現同一個接口,並且要持有一個構件(Component)對象的實例

第四步:定義具體裝飾者的對象,繼承Decorator對象,並在里面定義具體的方法

第5步:測試

 打印結果:

從上面的例子中,我們可以得知,男人這個對象,只有一個穿着的方法,具體穿什么無法實現,這時通過裝飾者模式,可以對Man這個對象進行裝飾,賦予具體穿什么的方法,這樣就實現了裝飾的效果。

裝飾者模式在jdk中應用體現:

最常見的在IO流中Inputstream運用了裝飾者模式;下面具體看看源碼來對比上面的示例;

首先InputStream最為被裝飾對象的基類:

FileInputStream作為具體被裝飾的對象:

FilterInputStream作為裝飾者的基類,繼承InputStream,並且持有InputStream對象的實例

BufferedInputStream作為具體的裝飾者對象,繼承了FilterInputStream,並對里面的方法進行了裝飾;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM