作者bill42362 (酒池肉林夜夜生科)
看板OOAD
標題Re: [請益] 這種情況有比 Decorator 更好的模式嗎?
時間Sat Oct 12 22:51:15 2013
※ 引述《bill42362 (酒池肉林夜夜生科)》之銘言:
: A {
: methodX();
: methodA();
: }
: B {
: methodX();
: methodB();
: }
: C {
: methodX();
: methodC();
: }
我想要的效果大概是這樣:
以 facebook 的分享來舉例
A 是分享圖片的物件,B 是影片的物件,C 是文章的物件
三個物件都有一個 display() 的 method (對應 methodX())
但是 A 的實作是貼圖,B 的實作是顯示某一畫格,
C 的實作則是顯示文字。
A 有專屬的 zoom() method (對應 methodA())
B 則是 play() (methodB())
C 是 copy() (methodC())
而我想動態加上的 methodY(), methodZ() 則可能是根據
權限決定是否加上的 share(), vote(), edit(), delete()
比如甲因為是作者,所以為他加上 edit() 和 delete()
同一個物件乙看到時可能只有 vote()
而丙因為是甲的好友,所以可以 share(), vote()
希望這樣有解釋的更清楚一點,
我希望實作出來的系統也就跟這個例子差不多了,
所以如果這樣的想法從根本上就錯也請直接吐槽 囧
再次感謝大大花時間看完!!
--
想你的時候 不一定能告訴你
如果不告訴你 也能會意
那我們就是有 真正的默契
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 121.215.129.5
推 legendmtg :你應該先考慮把share() vote edit()這些function 10/13 04:24
→ legendmtg :做成接收A B C這些type的non-member function 10/13 04:25
推 tails32100 :個人想法:就算動態加上去一樣,在調用時一樣要判斷 10/13 12:28
→ tails32100 :直接把要用的function全寫進去,判斷寫在裡面會比較 10/13 12:29
→ tails32100 :單純好懂 Orz 10/13 12:30
→ bill42362 :我的目標是只有 new 的時候判斷,全寫進去的話就會有 10/13 16:52
→ bill42362 :一堆重複的 share() vote() edit() 如果真的沒辦法 10/13 16:53
→ bill42362 :也只好這樣 TT 10/13 16:54
→ bill42362 :L大: 如果做成 non-member 是不是就表示 ABC 裡的東 10/13 16:55
→ bill42362 :西都要變成 public 了? @@" 10/13 16:55
推 qrtt1 :看起來沒有動態的必要,這是有沒有權限的問題啊xd 10/13 20:18
→ qrtt1 :你需要的是一個好的權限架構吧(思 10/13 20:33
推 legendmtg :提供set/get function就好了啊 為什麼要做成public? 10/13 21:10