真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

這篇文章給大家分享的是有關(guān)java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出都安免費(fèi)做網(wǎng)站回饋大家。

具體的代碼。

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

至此我們實(shí)現(xiàn)了上述基本的需求了。但我們知道在游戲的角色中,除了攜帶武器外,還可以穿戴很多種飾品,也就是裝備。穿戴不同的裝備可以增加不同的攻擊力。如果我們將上述的需求在修改的復(fù)雜一點(diǎn),也就是游戲角色除了要攜帶武器外,還可以穿戴很多種裝備。我們知道游戲中的裝備很多種為了方便我們測(cè)試,我們暫時(shí)只創(chuàng)建護(hù)肩、胸甲、飾品等。并且游戲角色穿戴不同的裝備需要為用戶增加不同的攻擊力。如果需求變更成這樣時(shí),那我們應(yīng)該怎么修改上述的代碼呢?具體的代碼如下:

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

我們現(xiàn)在已經(jīng)實(shí)現(xiàn)了新的需求了。但上面的代碼雖然實(shí)現(xiàn)了需求,但是違背了設(shè)計(jì)模式的基本原則,也就是將程序中涉及到可能變化的部分提取出來(lái)。除此之外還違背了另一種設(shè)計(jì)模式的基本原則,也就是開(kāi)放關(guān)閉原則。開(kāi)放關(guān)閉原則:類應(yīng)該對(duì)擴(kuò)展開(kāi)放,而對(duì)修改關(guān)閉。說(shuō)的簡(jiǎn)單點(diǎn)就是,如果我們已經(jīng)開(kāi)發(fā)好了一個(gè)類,如果有其他的需求,這個(gè)類現(xiàn)在并不能滿足我們的需求時(shí),那么可以通過(guò)任何擴(kuò)展的方式來(lái)改變我們這個(gè)類的行為,也就是前面說(shuō)的對(duì)類的擴(kuò)展是開(kāi)放的。而不能通過(guò)直接在原有類中修改,這也就是前面所說(shuō)的關(guān)閉,也就是說(shuō)對(duì)一個(gè)已經(jīng)開(kāi)發(fā)好的類對(duì)它的修改是關(guān)閉的,不允許任何的修改,只能通過(guò)擴(kuò)展來(lái)實(shí)現(xiàn)。如果我們現(xiàn)在要添加一個(gè)新的裝備,寵物類型的話,那么顯然上述的代碼違背了上述這2個(gè)設(shè)計(jì)模式的基本原則了,因?yàn)槲覀儾坏貌恍薷脑纫呀?jīng)修改好的代碼,這樣很容易會(huì)導(dǎo)致曾經(jīng)已經(jīng)編寫好的代碼產(chǎn)生新的問(wèn)題。那么我們?cè)趺茨芙鉀Q上述的問(wèn)題呢?有沒(méi)有一種設(shè)計(jì)模式類似觀察者模式那樣呢?在我們創(chuàng)建新的觀察者時(shí),是不需要重新修改主題的代碼的。答案一定是有的,也就是本文將要介紹的設(shè)計(jì)模式,也就是裝飾者模式。下面我們看一下裝飾者模式的定義。

裝飾者模式:動(dòng)態(tài)地將責(zé)任附加到對(duì)象上,若要擴(kuò)展功能,裝飾者提供了比繼承更有彈性的替代方案。

上面就是裝飾者模式的定義,說(shuō)的比較籠統(tǒng)。下面我們以游戲的需求為例,在來(lái)做簡(jiǎn)單的說(shuō)明。如果我們創(chuàng)建一個(gè)游戲角色的話,如果不設(shè)置裝備的話,那么當(dāng)前游戲角色就是沒(méi)有穿戴任何裝備,也就是當(dāng)前游戲角色的攻擊力只有武器。如果我們這時(shí)想要穿戴護(hù)肩這個(gè)裝備的話,那么就創(chuàng)建這個(gè)護(hù)肩對(duì)象來(lái)裝飾這個(gè)游戲角色,如果我們這時(shí)還想要穿戴胸甲的話,那么就繼續(xù)創(chuàng)建胸甲這個(gè)對(duì)象來(lái),繼續(xù)裝飾已經(jīng)被護(hù)肩對(duì)象裝飾的游戲角色。以此類推,并且,每個(gè)對(duì)象都負(fù)責(zé)計(jì)算自己對(duì)象的攻擊力即可。這樣程序在運(yùn)行時(shí),會(huì)先執(zhí)行最外面的裝飾對(duì)象,計(jì)算攻擊力,然后在繼續(xù)計(jì)算被它裝飾對(duì)象的攻擊力,這樣就達(dá)到了我們想要的效果了,也就是動(dòng)態(tài)的為對(duì)象添加相應(yīng)的職責(zé)了。那我們?cè)趺幢WC,不同的對(duì)象可以彼此被裝飾呢?所以,在使用裝飾者模式有幾點(diǎn)需要特殊的注意。下面是幾點(diǎn)特殊的地方。

  • 裝飾者和被裝飾者對(duì)象有相同的超類型

  • 可以用一個(gè)或多個(gè)裝飾者包裝一個(gè)對(duì)象

  • 對(duì)象可以在任何時(shí)候被裝飾,可以重復(fù)使用任意裝飾者

下面我們將代碼修改為裝飾者模式,下面為具體的代碼:

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

這樣我們就將代碼修改為裝飾者模式的代碼了,如果我們要新添加寵物裝備時(shí),我們只要新創(chuàng)建一個(gè)寵物類,并讓該類繼承裝備類GameEquipment即可,并且我們并不需要修改曾經(jīng)已經(jīng)編寫好的代碼,我們只是用了類的擴(kuò)展而已。下面為具體的代碼。

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

這就是裝飾者模式的好處,非常方便的擴(kuò)展。但它也有相應(yīng)的缺點(diǎn)就是會(huì)造成設(shè)計(jì)時(shí)有很多個(gè)類,因?yàn)槿魏我环N裝飾都需要定義一種類,如果我們需要更多的裝備時(shí)時(shí),那我們就要?jiǎng)?chuàng)建更多裝備的裝飾類,如果還有其它業(yè)務(wù)處理的話,我們又會(huì)創(chuàng)建符合這種需求的裝飾類。這就會(huì)造成一個(gè)簡(jiǎn)單的工具類,會(huì)依賴很多個(gè)類,造成使用這個(gè)工具類的困惑。就像Java IO一樣,大家都知道IO里的類其在是大多了,多到很多類壓根就沒(méi)有用過(guò) ,就是因?yàn)閖ava io 也是采用了這種裝飾者模式,所以它需要為每一種可能有的需求都創(chuàng)建相應(yīng)的裝飾類,來(lái)達(dá)到裝飾的目的。這也是裝飾者模式的弊端。但同時(shí)也是裝飾者模式的好處,也就是方便擴(kuò)展,如果我們要想擴(kuò)展Java IO中某些類的功能,那我們只需要?jiǎng)?chuàng)建一個(gè)新的裝飾者就可以了,這樣在程序中,我們就可以用我們自己創(chuàng)建的裝飾類,來(lái)裝飾Java IO中的對(duì)象了。

在Java IO中FilterInputStream類是一個(gè)抽象裝飾者,我們我們要實(shí)現(xiàn)自己的裝飾對(duì)象,那我們需要繼承FilterInputStream類。具體代碼如下:

直接讀取txt.txt內(nèi)容:

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

現(xiàn)在我們新創(chuàng)建了一個(gè)新的裝飾類UpperCaseInputStream,也就是用這個(gè)裝飾類裝飾的對(duì)象,獲取出的內(nèi)容都會(huì)將自動(dòng)轉(zhuǎn)成大寫字母。下面為測(cè)試用例。

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)

這樣我們就可以直接用這個(gè)UpperCaseInputStream裝飾類去裝飾任何FilterInputStream的類了。這也就是裝飾模式的好處。

感謝各位的閱讀!關(guān)于“java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!


當(dāng)前標(biāo)題:java設(shè)計(jì)模式中裝飾者模式怎么實(shí)現(xiàn)
網(wǎng)頁(yè)URL:http://weahome.cn/article/jgppjd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部