Re: [問題] 反design pattern的見解

看板CSSE作者 (排骨湯)時間18年前 (2007/02/12 13:29), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串10/12 (看更多)
: : 推 YuYuHo:vistor visit house,我覺得vistor最大的缺點 02/10 16:18 : : → YuYuHo:是帶給house太大的負擔 02/10 16:21 : : → YuYuHo:打錯字了,是visitor,剛打完麻將回來,win~~ya~~ 02/10 22:52 : : → YuYuHo:假如說house的內部節點其實是不穩定的型態,結果會造成 02/10 22:54 : : → YuYuHo:visitor的介面也變得很不穩定,很容易就搞得一團亂 02/10 22:55 : : → YuYuHo:通常採用visitor時,house本身的結構可能就很複雜了, 02/10 22:57 : : → YuYuHo:這時候還要管理節點的分派策略,還要維持節點穩定, 02/10 23:01 : : → YuYuHo:這表示house做好後就不能隨便更動,很容易牽一髮動全身. 02/10 23:02 : 請問不穩定的型態是什麼意義 : 是指需求改變?還是設計的失誤? : 為什麼house做好後就不能更動,這和visitor有什麼直接的關係呢 : 如果不採用visitor的話,那麼原本要加在繼承樹上面的功能又該怎麼處理? : 牽一髮動全身我同意 : 但是使用visitor pattern之後 : 動到的「全身」應該會比不用visitor pattern來得少吧? : 抱歉,我實在是不懂YuYuHo的這段推文 : 照他的說法,visitor pattern看似限制住了house擴充或修改的彈性 : 但是我不這麼認為.... : 不採用visitor的話,當初用visitor在繼承樹上面加入的功能又該怎麼辦? : 還有什麼更好的主意嗎? 抱歉ㄚ~其實我都是在胡扯,被大大發現了.(都是因為打麻將的關係) 請容許我再胡扯一下. 首先先把場景定義清楚. 在場景中有房子(house),房間(room),與訪客(visitor). room就是內部節點,house是節點管理員,visitor就是節點操作者. house擁有很多型態不一的room,並且接受visitor的來訪. 在一個房子之中有很多種房間,有客廳,臥室,浴室,廚房,等等... 來訪者也有很多種,有女傭,女朋友,廚師,水電工,等等... 如果房間髒了,就打電話請女傭來打掃,肚子餓了,就請廚師來煮飯, 水管漏水,就請水電工來修理,想睡覺的時候...就去睡覺. 這樣說起來好像還滿合理的,這就是我最初的設計想法. house,room,visitor三者的認知關係. room與visitor是互相認識的. house則同時認識room與visitor. 女傭掌管客廳,廚師掌管廚房,水電工掌管浴室. 我當初覺得,既然room與visitor是一對一的映射關係(在種類上). 為什麼不乾脆把分派的事交給house來作就好了. 這樣還可以讓不相干的room與visitor各自獨立. 於是當女傭來的時候,我就直接把客廳丟給她, 廚師來的時候,就直接把廚房丟給他,水電工來的時候,就直接把浴室丟給他 這樣似乎也還算合理ㄅ. 在我實際實作的情況中,room這個角色是經常更動的, 廚房仍舊是廚房,可是三不五時就會新增方法, 每增加一次我就要再實作一個visitor,太麻煩了. 於是我又用了一個大絕招,我把方法呼叫改成需求命令, 就是說用事件訊息傳遞的方式來操控物件, 於是room只需要有一個方法. 虛擬碼: result room::HandleWhat( command cmd ) = 0; 一但把這個變動因子抽出來後,我發現room與visitor可以完全抽象化. 我甚至可以把能力動態附加到visitor身上,讓女傭會修水管. 情況越來越抽象,我開始飄到大氣層了. 最後我發現一個事實是,room是一個複雜物件,house也是一個複雜物件, 事實上除了house之外,沒有人知道如何管理room與visitor. 所以所有的visitor都會在house的私有層被實作. 我還把操作方法抽成命令需求,變成一堆不易理解command物件. 複雜度太高了,載入大腦要耗費太多的查克拉. 我真的上天堂了. 最後我了解到,我做的一切都是在畫蛇添足. 在我完成程式,並且穩定的運作後. 我看著我寫的程式碼,不經要讚嘆,哇~這是哪個天才寫的呀! 這真是太玄了!一般人大概寫不出如此深遂又富有詩意的偉大程式吧! 在我對我的程式讚嘆不已後,我決定還是回到地球比較好. 我知道錯了. 以上純屬虎爛,如有虛構,既不負責.感恩ㄚ~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.113.133.56

02/12 14:37, , 1F
雖然注音不多,但看了還是不舒服
02/12 14:37, 1F

02/12 16:52, , 2F
...... 只贊成倒數三句以下內容
02/12 16:52, 2F
文章代碼(AID): #15p_inUi (CSSE)
討論串 (同標題文章)
文章代碼(AID): #15p_inUi (CSSE)