Re: [問題] 物件內的物件...彼此溝通的方法?
我同意 avhacker 這個設計八成有問題
就你舉的例子來說吧, 地球 => 島嶼 => 城市 => 人類
假設你需要對地球, 島嶼, 城市, 這三個東西做相對應不同的操作
那表示你的 "人類" 物件本身就認識地球, 島嶼, 與城市
所以要嘛你的人類必要擁有它們的 reference
要嘛人類能夠從某種神秘的管道 "確切地" 取得它們的 reference
(e.g. global variable... etc)
再來, "人類" 為何一定要在 "城市" 裡面呢?
或者換個角度說, "人類" 為何一定要從 "城市" 內取得?
如果你的程式是以 "人類" 物件可做的事為中心運轉,
那麼概念上 "人類" 甚至該儲存一個 "地球" 的 reference
或者 "人類" 根本不該在 "城市" 裡被創造出來
這樣講或許會有點混亂, 舉個例子來說
今天我有一個 papago 的車子經由衛星導航取得現在我所在的位置
當車子要計算最佳路徑時, 必須要取得擁有它的街道, 市, 縣... etc
而你甚至必須要將目標地點傳給車子!
感覺起來好像很麻煩, 但事實上
"計算最佳路徑" 可能根本就不該給車子負責
如果將車子交給一個擁有地區資訊的控制元件
並由那個元件計算車子到某個地點的最佳路徑
問題是不是看起來簡單多了?
好吧, 回到問題, 如果你一定要產生這個樣子的結構,
又一定要讓 "人類" 能取得 "地球" 資訊
而且不想讓人類有地球的 reference
那你可以考慮 Chain of resposibility
使用訊息一層一層傳遞, 直到有人處理它為止
例如傳遞一個 "取得地球溫度" 的訊息, 訊息可以包括一個自己的 reference
不認識它的人就傳遞它, 直到有一個地球認識這個訊息
再對這個訊息與 reference (i.e. 某個傳出這個訊息的 "人類") 做出回應
※ 引述《LiarPoker (Liar)》之銘言:
: ※ 引述《LiarPoker (Liar)》之銘言:
: : 標題: [問題] 物件內的物件...彼此溝通的方法?
: : 時間: Wed Jun 24 00:06:52 2009
: : 請問假若我有Class A, Class B, Class C, Class D
: : 彼此沒有繼承關係,而是在Class A中有Class B的object (在A內 new一個B)
: : Class B內new出一個Class C的object
: : Class C內new出一個Class D的object
: : 假若今天Class B, C, D都可能要去call Class A的某個function來改變A的某變數值
: : 或是Class A可能去call Class D的某個function來改變D的某變數值
: : 請問有哪些比較好的做法呢? (或假若不止A,B,C,D...可能有個十層這樣的關係)
: : 最普通的方式是在A內new B時,把A轉成pointer傳到B去,B保留一個指向A的pointer
: : 同樣地在B new C時,繼續把A轉成pointer傳到C去.....類似地一層層傳到最內層
: : 但有更好的方法嗎? 謝謝! (否則若當D要call C或B...代表D同時得擁有A,B,C的指標)
: : --
: : ◆ From: 123.193.5.4
: : → avhacker:設計八成有問題,不知你要做啥,也許該看些design patern書 06/24 00:12
: 一時不知該舉什麼樣的例子,就隨便亂想一個吧:
: 假若我設計了一個「模擬地球」的軟體:
: 我有個物件是「地球」
: 「地球」裡面會生成「島嶼(台灣)」
: 然後在「島嶼」內會有「都市(台北)」
: 「都市」裡還有「人類」
: (它們分別都是獨立的class object,透過new的方式來建立)
: 而今天假若有個「人類」要做作業,
: 得想要透過「地球」的一個函式「取得地球溫度」
: 來得到「地球」的變數「溫度」
: 類似的行為可以怎麼實做呢?
: 謝謝!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.124.99.126
→
06/25 16:40, , 1F
06/25 16:40, 1F
→
06/25 16:40, , 2F
06/25 16:40, 2F
→
06/25 16:41, , 3F
06/25 16:41, 3F
→
06/26 14:46, , 4F
06/26 14:46, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 8 篇):