JAVA裝飾類那些事兒

簡(jiǎn)介

裝飾類的核心就是增強(qiáng)相關(guān)類的功能牌废,著名的JAVA自帶的裝飾類就有BufferedWriter、BufferedReader、BufferedInputStream和BufferedOutputStream,大家也可以看看我寫的兩篇文章
BufferedOutputStream和BufferedInputStream那些事兒
BufferedOutputStream和BufferedInputStream那些事兒

裝飾類和子類的區(qū)別

根據(jù)簡(jiǎn)介以及兩篇文章癣亚,大家其實(shí)能夠發(fā)現(xiàn)蛤虐,它們都是針對(duì)已有的功能進(jìn)行加強(qiáng),然后增強(qiáng)其功能涂滴,說(shuō)到這個(gè)其實(shí)很多人會(huì)想到另外一個(gè)類

子類

是的友酱,我們也完全能夠用子類來(lái)代替裝飾類,但是這里用子類也會(huì)引起一些問(wèn)題

裝飾類過(guò)多

我們還是用上面幾個(gè)的四個(gè)系統(tǒng)自帶的裝飾類來(lái)說(shuō)明一下柔纵,我們可以得到這樣一個(gè)體系

Reader
|------FileReader
Writer
|------FileWriter

如果我們都用子類來(lái)實(shí)現(xiàn)增強(qiáng)功能的作用缔杉,就會(huì)得到

Reader
|------FileReader
|------------BufferedFileReader
Writer
|------FileWriter
|------------BufferedFileWriter

這樣,每個(gè)子類需要對(duì)應(yīng)一個(gè)修飾類搁料,后續(xù)我們?cè)偌恿俗宇惢蛳辏遣皇怯忠o接著加子類呢?
比如說(shuō)加缘,添加MediaWriter,MediaReader,Mp3Writer,,Mp3Reader

顯然鸭叙,麻煩

擴(kuò)展性差

其實(shí)上文就說(shuō)道了,我們每次加一個(gè)子類就需要加一個(gè)緩沖子類拣宏,過(guò)于麻煩復(fù)雜沈贝,所以我們不推薦這樣子操作

因此,裝飾類橫空出現(xiàn)

我們可能剛開(kāi)始只能夠想到這樣子的裝飾類
BufferedFileReader(FIleReader r)
BufferedMediaReader(MediaReader r)
BufferedMp3Reader(Mp3Reader r)
BufferedFileWriter(FIleWriter w)
BufferedMediaWriter(MediaWriter w)
BufferedMp3Writer(Mp3Writer w)

顯然麻煩勋乾,我們能夠提高一下效率宋下?

BufferedWriter(Writer w)
BufferedReader(Reader r)

我們用父類實(shí)現(xiàn)這個(gè)想法

寫到這里,有沒(méi)有機(jī)智的伙伴想問(wèn)辑莫,那我就不能夠用父類作為修飾類的直接子類嗎学歧?

這樣子

Reader
|-------BufferedReader
Writer
|-------BufferedWriter

這樣子想的伙伴很好,但是我想問(wèn)的就是這不就是直接把FileReader和BufferedFileReader直接合成一個(gè)了嗎各吨?

而且我們用裝飾類只是為了在原來(lái)的基礎(chǔ)功能上添加一些功能枝笨,增加某些功能(并不是全部功能),這樣子等于是徹底改寫揭蜒,整個(gè)類也會(huì)變得更加龐大

為了更好的說(shuō)明横浑,我來(lái)寫一個(gè)自己的BufferedReader的修飾類

自定義的BufferedReader

import java.io.FileReader;

public class myBufferedReader {
    
    FileReader fr=null;
    myBufferedReader(FileReader fr)
    {
        this.fr=fr;
    }
    public String readLine() throws Exception{
        
        StringBuilder sb=new StringBuilder();
        int ch;
        char c;
        while((ch=fr.read())!=-1)
            {
                c=(char)ch;
                if(c=='\r')
                    continue;
                else if(c=='\n')
                    return sb.toString();
                else
                    sb.append(c);
            }
        if(sb.length()!=0)
            return sb.toString();
        return null;
    }
    void close() throws Exception {
        fr.close();
    }
    
}

總結(jié)

裝飾類的本質(zhì)就是能夠?qū)σ恍╊愡M(jìn)行功能增強(qiáng)并且能夠添加一些功能,同時(shí)能夠很好的保證代碼的容量屉更,避免創(chuàng)建過(guò)多的類徙融,所以我們?cè)谛枰獙?duì)一些類進(jìn)行修飾和功能增強(qiáng)時(shí),盡可能多考慮用修飾類瑰谜,只需要傳一個(gè)對(duì)象就能夠操作了
欺冀。我舉個(gè)例子树绩,如果我們那一天把某一個(gè)類給刪了,用來(lái)修飾的子類是不是就整體廢除了隐轩?但是修飾類很可能就不必饺饭,因?yàn)樗灰欢ㄊ撬闹苯有揎椬宇悺T倩蛘呶覀冃枰獙?duì)某一個(gè)類進(jìn)行功能增強(qiáng)职车,我們也可以不必創(chuàng)建子類砰奕,也不用去查看它的子類,我在不創(chuàng)建的情況下我們可以利用修飾類來(lái)完成提鸟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仅淑,隨后出現(xiàn)的幾起案子称勋,更是在濱河造成了極大的恐慌,老刑警劉巖涯竟,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赡鲜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡庐船,警方通過(guò)查閱死者的電腦和手機(jī)银酬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)筐钟,“玉大人揩瞪,你說(shuō)我怎么就攤上這事÷ǔ澹” “怎么了李破?”我有些...
    開(kāi)封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)壹将。 經(jīng)常有香客問(wèn)我嗤攻,道長(zhǎng),這世上最難降的妖魔是什么诽俯? 我笑而不...
    開(kāi)封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任妇菱,我火速辦了婚禮,結(jié)果婚禮上暴区,老公的妹妹穿的比我還像新娘闯团。我一直安慰自己,他們只是感情好颜启,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布偷俭。 她就那樣靜靜地躺著,像睡著了一般缰盏。 火紅的嫁衣襯著肌膚如雪涌萤。 梳的紋絲不亂的頭發(fā)上淹遵,一...
    開(kāi)封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音负溪,去河邊找鬼透揣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛川抡,可吹牛的內(nèi)容都是我干的辐真。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼崖堤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼侍咱!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起密幔,我...
    開(kāi)封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤楔脯,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后胯甩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體昧廷,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年偎箫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了木柬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡淹办,死狀恐怖眉枕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娇唯,我是刑警寧澤齐遵,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站塔插,受9級(jí)特大地震影響梗摇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜想许,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一伶授、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧流纹,春花似錦糜烹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至茸炒,卻和暖如春愕乎,著一層夾襖步出監(jiān)牢的瞬間阵苇,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工感论, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绅项,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓比肄,卻偏偏與公主長(zhǎng)得像快耿,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子芳绩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359