java 板


LINE

※ 引述《tmxcrows (屋裡哈哈)》之銘言: : 如果有很多容器系列(EX: ArrayList,List,Vector等) : 那上面應該會有一個抽象的父類別讓他們繼承或implements以提供相同的資料型態, : (事實上API內也這麼做) : 而那個父類別提供sort()的抽象方法讓底下的子類別override,(API沒有採取這種作法) : 這兩種不同的想法在物件導向的設計上有什麼不同呢? : 有沒有大大可以提出另外一組例子讓小弟我體會一下這之中的奧妙呢? : 還請大大們提示一下,如果語氣不好還請多多包含, : 問題如果太過膚淺的話,提示一下我會自刪的! 如果我沒有誤解你的意思 , 你想問的是為什麼要透過一個第三方的媒介來處理這個問題. 在此先不論調用 Arrays 跟 Collections 的差異 . (雖然原文用Collections 比較恰當 , 但這跟這個問題沒有直接關聯.) 這個問題的另一種問法應該是這樣的 , 為什麼是用 Collections 提供 sort method , 而不是由 AbstractCollection (List/Set 的父類別) 直接寫一個sort method. 這個問題在我的理解 , 其實是 util (算是外部擴充吧,不太會翻.) 跟 original 的差異 , 從原本的問題來看 , 這個問題可以從幾個方向下去著手 , 1. 繼承 AbstractCollection 的類別有規定一定需要排序嗎? 基本上我們在探討的項目是當有 coder 試圖擴充類別時 , 是否需要進行這個項目 , 當然我們可以強迫性的要求 , 但是這樣做的結果往往只是讓寫子class變得又複雜又限制重重. 2. 如果有需要排序的情形 , 排序的行為是如何進行 如果排序這個功能是依照各子類別而會有所不同的話 , 就可能會影響要實作的方式. 不過在這個例子中排序的行為不需要考慮 , 因為實際上是交給 Collection 中的成員實做 sortable 來作排序依據, 並且提供 Comparator 的方式來作排序行為擴充. 3. 目前的環境條件限制. 有時候基於向下相容以及環境條件的考量(像是用別人的lib等) , 我們會盡量避免修改(或甚至是無法修改) 現有的class定義 , 這時候我們也會傾向於撰寫 util class. 我並不曉得當初原始設計者的想法 , 不過 Collections 非常有 util的味道 , 所謂的 util class 就是用另一個類別來輔助某特定類別的操作 . 舉例而言 , 某第三方套件 (common lang) 就有個好用的 StringUtils , 以 StringUtils.trim(String)來說 , 它提供將特定字串去除前後空白的擴充功能 . 這個狀況下 , 一來是滿足我們無法修改 String 的環境條件 , 二來是針對 String 進行的功能擴充 , 三來他還可以確保 null-safe. (註1) 有時候也會為了特殊領域的擴充來寫 util class , 比方說 String 類在 common lang中還有一個 StringEscapeUtils , 它可以取得對 String 作 html / java /javascript 等規則的escape結果 . ---- 當然這種問題最後的癥結大多在於 "責任" 該交給那個類別 , 所以也不見得有定論 , 只是設計手法之一而已. 這種設計方案如果跟考試一樣都有個必勝解或者必定要這麼選擇的理由 , 那寫程式或許會變得很簡單(無趣?) 也不一定 . XD --- 對於 original / util 的議題, 也有一個 original 的範例 , Object 的 clone() 就是以原生函式的方式出現, 但他雖然是最底層的 Object 有的 , 還是需要一個 Cloneable 來確保有 Support . :p --- 註1 . null-safe 是指避免發生以下狀況 String a=null; String b="hello"; 此時若調用 a.equals(b) 會出現 NullPointerException , 但有引入 common lang 這個lib時 , 就可採用 StringUtils.equals(a,b)來作判斷 , 可有效避免這問題. 參考資料 API-Collections http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collections.html API-AbstractCollection Direct Known Subclasses: AbstractList, AbstractQueue, AbstractSet http://java.sun.com/j2se/1.5.0/docs/api/java/util/AbstractCollection.html API-ArrayList http://java.sun.com/j2se/1.5.0/docs/api/java/util/ArrayList.html Common Lang API -org.apache.commons.lang.StringUtils http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html Common Lang API -org.apache.commons.lang.StringEscapeUtils http://0rz.tw/RxxzI -- What do you want to have ? / What do you have? 從書本中,你可以發現我的各種興趣。 從CD中,你可以瞭解我所喜歡的偶像明星。 或許從文字你很難以瞭解一個人,但從物品可以。 My PPolis , My past. http://ppolis.tw/user/Tony --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 221.169.78.140 ※ 編輯: TonyQ 來自: 221.169.78.140 (03/06 21:50) ※ 編輯: TonyQ 來自: 221.169.78.140 (03/06 21:53)
1F:推 tmxcrows:太感謝大大了!!能夠了解我問的意思還可以解答的這麼清楚 03/06 23:53
2F:推 zeat:好文 推! 03/07 08:56







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燈, 水草

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

TOP