裝飾設計模式

2021-08-27 17:12:09 字數 1774 閱讀 2199

裝飾設計模式:

當對類的功能進行增強時,可稱之為對該類的裝飾。

同時它的出現具備靈活性

class person

}class newperson

void newchi()

}裝飾和繼承:

裝飾設計模式是一種解決某一類問題的思想。該類問題的有效解決方案。解決給類提供增強型功能的問題。

繼承:是物件導向的特徵之一。

例子:(api中沒有真實存在的類)

writer

|--textwriter

|--mediawriter

該體系的出現已經可以完成對文字資料和**資料的寫操作。

但是發現,效率較低,為了提高效率,就加入了緩衝技術。

文字寫入緩衝

**寫入緩衝

按照物件導向的思想,為了提高擴充套件,可以通過繼承的方式來完成。

writer

|--textwriter

|--bufferedtextwriter

|--mediawriter

|--bufferedmediawriter

這樣就完成了文字和**資料寫操作,效率提高。

當如果該體系加入乙個子類basewriter,而且該子類也需要效率提高,

writer

|--textwriter

|--bufferedtextwriter

|--mediawriter

|--bufferedmediawriter

|--basewriter

|--bufferedbasewriter

如果體系擴充套件,都需要定義乙個該子類具備高效緩衝功能的子類。

這樣體系擴充套件很麻煩。

所以我們發現,這些子類使用的緩衝技術都是一樣的,緩衝區其實就是定義了臨時儲存容器將資料進行臨時緩衝,至於具體的寫操作,還是writer的子類物件完成的,比如textwriter等

既然這樣,可以將緩衝技術單獨封裝成乙個物件。要對那個具體的物件進行緩衝技術的使用,只要將物件傳遞給緩衝區物件即可。

對緩衝區物件進行單獨描述

class bufferedwriter extends writer

}當緩衝技術單獨封裝成了物件後,它具備的還是寫功能,只不過可以讓其他寫功能進行高效,所以它還是writer類中的一員

所以這時體系變成了這樣

writer

|--textwriter

|--mediawriter

|--bufferedwriter

和原來的體系

writer

|--textwriter

|--bufferedtextwriter

|--mediawriter

|--bufferedmediawriter

|--basewriter

|--bufferedbasewriter

裝飾設計模式的出現可以對一組類進行功能的增強。而且裝飾類本身也是該體系中的乙個子類。

**體現:

通常情況下,

裝飾類一般不單獨存在。

都是通過建構函式接收被裝飾的物件

基於被裝飾的物件的功能,並對外提供增強的功能。

bufferedwriter//這時乙個提供增強功能的類,就把這種優化方式,定義成一種最終解決問題的方案,這種設計模式就是裝飾設計模式

裝飾設計模式和繼承的區別:

繼承會讓體系變得臃腫

裝飾相對來說更為靈活。

在io中裝飾設計模式用的很多。

比如bufferedwriter

bufferedreader

設計模式 裝飾模式

裝飾模式,動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。m 超級瑪麗 普通繼承模式實現 a 發鏢 能組合出七種功能 m1 a m4 a b b 變身 m2 b m5 a c c 無敵 m3 c m6 b c m7 a b m m1 a b 組合方法 new m2 m...

設計模式 裝飾模式

剛看了看設計模式,真是費了好多的腦細胞。想著想著就到了食堂。o o哈!正是長身體的時候 大神勿噴 一定要多吃點。於是我打了乙份公尺飯,然後又端著盛公尺飯的盤子買了乙份菜 看著還不是很夠,就又端著這個盤子買了一條最愛吃的魚。裝飾模式!五一要來了。回家轉轉,沒有小外甥的玩具怎麼行。於是我去超市,推著購物...

設計模式 裝飾模式

複習設計模式 裝飾模式 裝飾模式 在不修改已經存在的類的情況下,動態的新增新的功能,實現即插即用,開放關閉原則 public inte ce man public class batman implements man override public void killmonster public ...