裝飾模式
成都創(chuàng)新互聯(lián)2013年至今,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元山南做網(wǎng)站,已為上家服務(wù),為山南各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):13518219792裝飾者模式:動(dòng)態(tài)地將責(zé)任附加到對(duì)象上。若要擴(kuò)展功能,裝飾者提供了比繼承更有彈性的替代方案。
裝修模式的角色如下:
抽象構(gòu)件角色(Component):給出一個(gè)抽象接口,以規(guī)范準(zhǔn)備接收附加責(zé)任的對(duì)象。
具體構(gòu)件角色(Concrete Component):定義將要接收附加責(zé)任的類(lèi)。
裝飾角色(Decorator):持有一個(gè)構(gòu)件(Component)對(duì)象的引用,并定義一個(gè)與抽象構(gòu)件接口一致的接口。
具體裝飾角色(Concrete Decorator):負(fù)責(zé)給構(gòu)件對(duì)象“貼上”附加的責(zé)任。類(lèi)圖如下:
裝修模式的特點(diǎn):
裝飾對(duì)象和真實(shí)對(duì)象有相同的接口。這樣客戶(hù)端對(duì)象就可以以和真實(shí)對(duì)象相同的方式和裝飾對(duì)象交互。
裝飾對(duì)象包含一個(gè)真實(shí)對(duì)象的引用(reference)。
裝飾對(duì)象接收所有來(lái)自客戶(hù)端的請(qǐng)求,它把這些請(qǐng)求轉(zhuǎn)發(fā)給真實(shí)的對(duì)象。
裝飾對(duì)象可以在轉(zhuǎn)發(fā)這些請(qǐng)求之前或之后附加一些功能。
這樣就確保了在運(yùn)行時(shí),不用修改給定對(duì)象的結(jié)構(gòu)就可以在外部增加附加的功能。
裝修模式的缺點(diǎn):
裝飾模式會(huì)導(dǎo)致設(shè)計(jì)中出現(xiàn)許多小類(lèi),如果過(guò)度使用,會(huì)使程序變得很復(fù)雜。
裝飾模式是針對(duì)抽象組件(Component)類(lèi)型編程。但是,如果你要針對(duì)具體組件編程時(shí),就應(yīng)該重新思考你的應(yīng)用架構(gòu),以及裝飾者是否合適。當(dāng)然也可以改變Component接口,增加新的公開(kāi)的行為,實(shí)現(xiàn)“半透明”的裝飾者模式。在實(shí)際項(xiàng)目中要做出較佳選擇。
裝飾模式的使用場(chǎng)景:
適合對(duì)默認(rèn)目標(biāo)實(shí)現(xiàn)中的多個(gè)接口進(jìn)行排列組合調(diào)度
適合對(duì)默認(rèn)目標(biāo)實(shí)現(xiàn)進(jìn)行選擇性擴(kuò)展
適合對(duì)默認(rèn)目標(biāo)實(shí)現(xiàn)未知或者不易擴(kuò)展的情況。
實(shí)例1:咖啡店有好幾種咖啡,每一種都是自己的價(jià)格,成分等,類(lèi)圖如下;
問(wèn)題的產(chǎn)生:咖啡可以放些糖等調(diào)料,調(diào)料種類(lèi)多,新增了N個(gè)子類(lèi)來(lái)對(duì)應(yīng)咖啡,價(jià)格,調(diào)料之間的關(guān)系,后期維護(hù)有了很大的挑戰(zhàn),類(lèi)圖如下:
解決:我們可以用裝飾模式來(lái)解決,最終的類(lèi)圖如下:
實(shí)例2:擴(kuò)展JAVA里的I/O,讀取文件里的數(shù)據(jù),并轉(zhuǎn)成大寫(xiě)字母輸出
分析:JDK里I/O框架用到了適配器模式,類(lèi)圖如下:
說(shuō)明:抽象構(gòu)建角色(InputStream),裝飾角色(FilterInputStream),具體裝飾(BufferdInputStream等),具體構(gòu)建角色(FileInputStream等)
實(shí)現(xiàn):我們看類(lèi)圖,我們繼承FilterInputStream,覆蓋掉read方法就能滿(mǎn)足這個(gè)需求了。
設(shè)計(jì)原則:類(lèi)應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。
當(dāng)前名稱(chēng):“HeadFirst設(shè)計(jì)模式“:裝飾模式-創(chuàng)新互聯(lián)
本文來(lái)源:http://muchs.cn/article48/cdesep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、網(wǎng)站收錄、服務(wù)器托管、網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容