OOAD 板


LINE

※ 引述《H45 (!H45)》之銘言: : 好!那麼該選擇哪一種比較好? : 就目前線索的答案應該是:都可以 : 如果吉娃娃未來可以咬其他的東西,不僅僅是長今 : 那麼第一種方法的吉娃娃需要增加很多方法: : 吉娃娃.咬(長今); : 吉娃娃.咬(第二種東西); : 吉娃娃.咬(第三種東西); : 這種情況最好把「咬」放在被咬的類別裡面 : 也就是: : 長今.被咬(古娃娃); : 第二種東西.被咬(吉娃娃); : 第三種東西.被咬(吉娃娃); : 如此一來,每次有新的東西要被咬,就不需要更改已經寫好的類別。 [部份恕刪] 我覺得這邊反而不是我有問題的部份... 假如吉娃娃要咬很多其他的物件, 我可能會做個《interface 可以被咬》, 然後有可能被咬的, 都去繼承這個可以被咬的interface. 這樣我就只要用一個方法 吉娃娃.咬(I可以被咬的東西); 反過來說, 如果會咬別人的, 不止吉娃娃一個, 那我可能就做一個 《interface 會咬人的》, 然後會咬人的都去繼承它. 繼承的都要實作 咬 這個method 我真正的問題是 class 醫女 : I可以被咬 { // 可以被咬可能表示這有個性質 例如 HP // 被咬時, HP -= 受到的傷害; } class 狗 : I會咬人 { public void 咬人(I可以被咬) { // 看要怎麼咬 } } 然後當我在用這兩個類別時 醫女 長今 = new 醫女(); 狗 吉娃娃 = new 狗(); 狗.咬(長今); 這時候 狗要直接去操作長今的HP嗎? 站在 data hiding的立場 是不是長今應該提供一個 被咬 的method? 可能長這樣 public void 被咬() { HP -= 10; } 或許還另外提供一個 public bool IsDead() // 看有沒有被咬死 { if(HP == 0) return true; return false; } 如果這樣寫的話 長今似乎不在乎誰咬她 她的職責是在判斷自己有沒有被咬死 又或者 如果需要反咬回去的話 可能寫成 public void 被咬(看是誰咬她) { if(!IsDead()) 咬回去(看是誰咬她); // 當然這裡的 "看是誰咬她" 同時繼承 // 1. I會咬人 2. I會被咬 兩個interface } 好像離題太遠了... 所以 不管是 吉娃娃.咬(長今); 或者是 吉娃娃去call 長今.被咬(); //可能在吉娃娃內部有一個可以被咬的handle 長今內部都要做一個 被咬 的method public void 被咬(); 這樣對嗎? --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.55.199
1F:→ H45:呵!我看到 HP 了,如果是多對多的問題可以建立表格來管理 11/18 23:48
2F:推 H45:另外有一件我一直很在意的事情,為什麼被咬的方法沒有參數輸入 11/18 23:54
3F:推 abcdefghi:如果是吉娃娃和長今是tight couple,那兩個都直接實作 咬 11/19 00:17
4F:→ abcdefghi:和 被咬, 然後直接呼叫就好. 如果是loose couple,就做一 11/19 00:19
5F:→ abcdefghi:個listener的object,吉娃娃咬長今時,長今要有反應,就註 11/19 00:20
6F:→ abcdefghi:冊,實作這個listener,同時設為長今的friend,而長今 被咬 11/19 00:21
7F:→ abcdefghi:的反應,就寫在這個listener或是listener再去呼叫長今的 11/19 00:23
8F:→ abcdefghi:被咬 這個private method. 如果吉娃娃和長今一直互咬,pk 11/19 00:24
9F:→ abcdefghi:那吉娃娃也得在初始化時,對長今註冊一個listener,把各種 11/19 00:25
10F:→ abcdefghi:長今動作的反應都寫進這個listener. 11/19 00:26
11F:→ abcdefghi:我想,實務上只能儘量把需求收集清楚,但最後還是看自己的 11/19 00:27
12F:→ abcdefghi:口味和未來的眼光. 11/19 00:29
13F:→ abcdefghi:對了,如果能用aggregate代替繼承,就儘量少用繼承. 11/19 00:30
14F:推 sfp:我對java不太熟 請問listener是不是就是observer pattern 11/19 01:40
15F:→ sfp:中的 subscriber? 11/19 01:41
16F:推 abcdefghi:是的. 11/19 06:07







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP