靜態工廠方法的主要缺點在於,類如果不含有公有的或者受保護的構造器,就不能被子類化。對於公有的靜態工廠所返回的非公有類,也同樣如此。例如,要想將collectionsframework中的任何方便的實現類子類化,這是不可能的。但是這樣也許會因禍得福,因為它鼓勵程式設計師使用復合(composition),而不是繼承。
靜態工廠方法的第二個缺點在於,它們與其他的靜態方法實際上沒有任何區別。在api文件中,它們沒有像構造器那樣在api文件中明確標識出來,因此,對於提供了靜態工廠方法而不是構造器的類來說,要想查明如何例項化乙個類,這是非常困難的。同時,你通過在類或者介面注釋中關注靜態工廠,並遵守標準的命名習慣,也可以彌補這一劣勢。下面是靜態工廠方法的一些慣用名稱:
valueof—— 不太嚴格地講,該方法返回的例項與它的引數具有相同的值。這樣的靜態工廠方法實際上是型別轉化方法。
of—— valueof 的一種更為簡潔的替代,在 enumset (見第32條)中使用並流行起來。
getinstance—— 返回的例項是通過方法的引數來描述的,但是不能夠說與引數具有同樣的值。對於 singleton 來說,該方法沒有引數,並返回唯一的例項。
newinstance—— 像 getinstance 一樣,但 newinstance 能夠確保返回的每個例項都與所有其他例項不同。
gettype—— 像 getinstance 一樣,但是在工廠方法處於不同的類中的時候使用。type表示工廠方法所返回的物件型別。
newtype—— 像 newinstance 一樣,但是在工廠方法處於不同的類中的時候使用。
type表示工廠方法所返回的物件型別。
第1條:考慮用靜態工廠方法代替構造器
簡而言之,靜態工廠方法和公有構造器都各有用處,我們需要理解它們各自的長處。靜態工廠通常更加合適,因此切忌第一反應就是提供公有的構造器,而不先考慮靜態工廠。
EffectiveJava 一 靜態工廠方法
design pattern idiom gamma 95 設計模式領域的標準參考書 的清晰與整潔最為重要 模組的使用者永遠也不該被模組的行為所迷惑 那樣就不清晰了 模組要盡量的小,但又不能太小 本書使用的術語模組,是指任何可重用的軟體組織,從單個方法到包含多個包的複雜系統都可以是乙個模組 應該被重...
手機命名的一些規則
手機命名的一些規則 s super smart 三星移動產品系列中的頂尖級產品。該類別專為三星旗艦產品設立,包括已在全世界創造1000萬部銷量並榮獲諸多獎項的samsung galaxy s智慧型手機。r royal refined 高階產品。其強大硬體配置 出色的效能表現適合熱衷技術的專業人士使用...
關於靜態工廠方法命名的幾句話。
很少有廣泛使用的方法來命名這些型別的方法,尤其是在通用類中。還有許多其他變體,但它們並不是那麼普遍。從我的角度來看,這些命名約定看起來是這樣的 最近我遇到了乙個不便之處的 和with 如果我將它們與靜態匯入結合使用 為簡潔起見 它們的清晰度就會變得鬆散 難以決定哪個的 要麼with 屬於哪個類別 如...