作者jackace (inevitable......)
看板Ruby
標題Re: [問題] 一個MVC pattern和composite pattern的 …
時間Fri Oct 12 14:03:05 2007
※ 引述《godfat (godfat 真常)》之銘言:
: ※ 引述《jackace》之銘言:
: : 假如我的model中用到composite pattern 例如
: : A <---- B
: : A <---- C
: 我看不出來這跟 composite pattern 有什麼關係?
: composite pattern 是指自己包含自己喔...
: 如
: class Thing; end
: class Container < Thing; end
: 然後 Container 裡只能放 Thing, 而 Container 本身也是 Thing,
: 所以 Container 裡可以放 Container.
: (不過在 dock typing 下,談這個意義似乎沒有很大)
: 你的圖例看起來只是簡單的繼承而已
: : 那麼在view中 如果要在遇到A,B,C時 在畫面上畫出不同的圖形
: : 有辦法規避掉
: : if(p instanceof A){
: : .....
: : }else if(p instanceof B){
: : .....
: : }else if(p instanceof C){
: : .....
: : }
: : 這樣的寫法嗎?
: 我不知道你為什麼會碰到這個問題,可能要把情形講得更清楚?
: 但如果只是單純有 is_a? switch 的問題,
: 可以考慮用註冊的,如註冊到 hash 中。
: 如果是有雙重以上的 dynamic binding 問題,
: 請洽 multi-method.
: p.s. 你是在寫 Ruby 嗎?看起來不像?比較像 Java 啊...
抱歉喔 我可能沒敘述的很好 我是用ruby沒錯...
我的結構是這樣:
class Content
end
class Section < Content
def initialize(title)
@items = Array.new
@title = title
end
end
class Text < Content
def initialize(text)
@text=text
end
end
那個Section.items放的是任何的Content 所以可以是Section或Text
這樣應該就是composite pattern....吧??? 我剛學DP不太確定是不是這樣叫
那我在View 裡面要從最頂層的Section開始往下traverse
比如說遇到Section的時候要用粗體把Section的title印出來
遇到Text的時候要印text
那要怎麼避免if(instance_of?)的寫法??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.179.244