Re: [其他] 面試題目

看板OOAD作者 (Alien)時間10年前 (2014/11/29 11:40), 10年前編輯推噓4(402)
留言6則, 4人參與, 最新討論串1/2 (看更多)
老實說和 OOAD 扯不上什麼關係吧. 回到問題上,可以大為簡化成: // 後面全部是 psuedo-code for (i = 1 to 100) { boolean handled = false if (isMultipleOfThree(i)) { print "B" // 你的 constant 老實說極無意義 handled = true; } if (isMultipleOfFive(i)) { printf "F" handled = true } if (!handled) { print i } } 然後加入一些和 OOAD 有點關係的東西, 套用類似 Strategy 的 pattern: interface ItemHandler { // 用 generics 更佳,這裡簡單寫演示一下概念 // return true if handled, false if not boolean handleItem(int i); } class PrintMultipleOfIntItemHandler implements ItemHandler { int base; String output; public MultipleOfIntItemHandler(int base, String output) { this.base = base; this.output = output; } boolean handleItem(int i) { if (i % base == 0) { print output; return true } return false } } class SimplePrintItemHandler implements ItemHandler { boolean handleItem(int i) { print i return true } } 你的 main loop 可以變成 // 這部份其實可以用不同方法達成,比如 config, DI etc List<ItemHandler> handlers = [new PrintMultipleOfIntItemHandler(3,"B"), new PrintMultipleOfIntItemHandler(5,"F")]; Handler defaultHandler = new SimplePrintItemHandler(); // 不必改動的 main loop for (int i = 1 to 100) { boolean handled = false foreach (handler in handlers) { result = handler.handleItem(i); handled = handled || result; } if (!handled) { defaultHandler.handleItem(i) } } 如果每個條件和處理是獨立的話,這做法可以讓你加入不同的 條件和處理方法時候,不需改動 main loop 的 logic 為了解決額外那個 defaultHandler,可以利用 chain-of-responsibility pattern。 再進一步,如果你想連 item 的提供方法也可以替換,就弄一個 ItemProvider 的 interface 吧: class ItemProvider { // get next item. return null if no more item available int nextItem(); } 這部份的實作留給你自己練習 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.19.45.197 ※ 文章網址: http://www.ptt.cc/bbs/OOAD/M.1417232452.A.E2B.html ※ 編輯: adrianshum (223.19.45.197), 11/29/2014 11:49:54

11/29 12:03, , 1F
THX
11/29 12:03, 1F
※ 編輯: adrianshum (223.19.45.197), 11/29/2014 15:29:05

12/20 02:54, , 2F
推。在下多年新手,看了有感。
12/20 02:54, 2F

12/26 17:30, , 3F
再推一次@@
12/26 17:30, 3F

03/05 14:20, , 4F
大推
03/05 14:20, 4F

07/18 18:11, , 5F
題目好像還有一個條件..
07/18 18:11, 5F

07/18 20:37, , 6F
對不起 眼拙了
07/18 20:37, 6F
文章代碼(AID): #1KUK14uh (OOAD)
討論串 (同標題文章)
文章代碼(AID): #1KUK14uh (OOAD)