天天看點

java裝飾者模式例子

關于java裝飾者模式的一個小問題。

其實我覺得裝飾者和代理模式很像。這裡我覺得就是代理模式。worker幫aworker把事情給做了。不過aworker的功能又不隻是worker的功能,它還可以有别的功能,比如又傳來一個bworker給它,它就又擴充了一種功能了。

更多追問追答

能問個問題嗎?this.worker=worker這句代碼怎麼了解?過去比如說this.age=age,是給調用這個成員變量的對象指派。。而這個this後的worker,是不是成員變量????如果是的話?成員變量怎麼又能去調用函數呢?不應該是對象,函數名,來調用函數的嗎?

呵呵,當然是成員變量了。你說的對,對象.函數名,這是調用函數的方式,可是你不是也知道麼,worker就是一個對象呀。對象可以作為另一個對象的成員變量,并不是隻有基礎類型才能作為成員變量的,了解了麼

那比如我産生一個Aworkeraworker=newAworker(plumer)。這個是怎麼執行的?

是this.worker=worker是不是等價于aworker.worker=plumer;如果是這樣執行的話,那這句代碼怎麼了解aworker.worker=plumer。。謝謝你了,我剛學java1個多星期,好難了解。

對,你的了解是對的。既然你傳遞了plumer,那麼plumer一定是Worker這個類的對象,因為你隻要這樣的一個構造方法。

this.worker=worker是不是等價于aworker.worker=plumer答案是:對的。this表示目前對象。

這如何了解:就是把pumber這個對象賦給了aworker這個類的成員變量worker

最後一個問題,謝謝了。其實Worker是一個接口,Plumer是該接口的一個實作類,為啥Plumer産生的對象plumer不需要先向上轉型,就直接可以作為Worker類型的參數傳遞Aworkeraworker=newAworker(plumer)到這裡面呢?

其實,你剛接觸java,不應該看設計模式。應該從基礎的開始,看看視訊,編程式設計式,多了你就能了解設計模式了。我也是這樣走來的。

本回答由提問者推薦

java的i/o類中有哪些用到了裝飾者模式

裝飾者模式用來擴充對象的功能,給對象添加不同的功能。

在io流中,比如

BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(newFileInputStream(newFile("d:/text.txt"))));

這種對File類的包裝,由内層到外層擴充輸入流的功能,就是一個典型的裝飾者模式。inputstream是被裝飾對象,然後Fileinputstream、InputStream、BufferedReader都是它的裝飾器,用來擴充它的功能!

Java的裝飾模式中裝飾角色已經可以擴充其它的功能,為什麼還要設定一個具體裝飾角色?

是可以合并的,但是不建議這樣做,因為擴充需可能要多個具體裝飾器角色,那麼裝飾器角色 就可以操作多個了,簡單的說如果你1對1的情況,全部合并都沒關系,但是需要應對1對多的情況告訴你個情景吧,java io

java設計模式--裝飾模式傳參求解