作者dlikeayu (太陽拳vs野球拳)
看板OOAD
標題Re: [請益] 這種情況有比 Decorator 更好的模式嗎?
時間Mon Dec 16 14:03:32 2013
這邊想問個問題
在PHP使用時
好比說我的decorate有A,B,C
component為 X
之後如下包裝
object = new X();
objecjt = new A(object);
objecjt = new A(object);
objecjt = new A(object);
objecjt = new A(object);
objecjt = new A(object);
objecjt = new A(object);
這樣我就算裝飾時沒做任何事,只有被裝飾後有多委任的功能
可是在測記憶體時卻會愈來愈肥大
Object(A){Object(A){Object(A){Object(A){Object(A){Object(A){Object(X)}}}}}}
這在decorator的設計模式是正常的嗎?
還是是語言的特性關係造成的呢?
我目的是想被裝飾時就多該裝飾的Method,
並不用改寫什麼值
所以像這樣是使用上的例外還是我不該用這設計模式來做我想做的目的
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.250.38.210
1F:→ dlikeayu :應該說,我這邊故意一直重覆裝飾A進來,但是卻愈來愈 12/16 14:23
2F:→ dlikeayu :肥,而我的目的只是想要裝飾A的額外的Method 12/16 14:23
3F:→ qrtt1 :這看起來比較適合去 PHP 問唄@@? 12/17 14:59
我要問的其中一個問題是
這是Decorator的特性嗎?
因為每裝飾一次就多包一次上一個自己
這樣很佔記憶體
※ 編輯: dlikeayu 來自: 111.249.154.151 (12/17 17:06)
4F:→ qrtt1 :這就像跟穿衣服一樣,穿厚了、多了、就胖嗎@@? 12/17 21:36
5F:→ qrtt1 :至於為什麼胖那麼多,是穿法的問題,還是衣服有問題? 12/17 21:37
不是
如果是每裝飾一樣就等於多穿一件衣服還好
但是現在是每裝飾一次就等於再多背一個人在背後(真飄)
因為我直接print出裝飾過幾次的物件
它除了新的裝飾外,還外包上一個自己
而上一個自己還會包上上一個自己
※ 編輯: dlikeayu 來自: 111.249.154.151 (12/18 01:01)
6F:→ qrtt1 :所以,這看起來是特定語言的問題了。建議前往 PHP 版 12/18 11:46
7F:→ qrtt1 :show 出你的實作細節,讓大家一起討論吧。 12/18 11:47
8F:→ TonyQ :你沒把 implement 寫出來不會有人看懂的啦... 12/18 11:51