Effective Java-創建 大發彩_票平臺出租 和銷毀對象
阿新 • • 發佈:2018-07-23
錯誤 fec 重復 不一致 方式 使用 而是 條件 包含 一、考慮用靜態方法代替構造器
? 類可以通過靜態工廠方法來提供它的客戶端,而不是通過構造器。
優勢:
? 1、它們有名稱,可以根據名稱將創建對象的行為表達的更清楚。
? 2、可以不必在每次調用它們的時候都返回一個新對象。這使得不可變類可以使用預先構建好的實例,或者將構建好的實例緩存起來,進行重復利用。
? 3、它們可以返回原返回類型的任何子類型的對象。API可以返回對象,同時又不會使對象的類變成公有的。以這種方式隱藏實現細節。
? 4、在創建參數化實例的時候,它們使代碼變得簡潔。
缺點:
? 1、類如果不含公有的或者受保護的構造器,就不能被子類化。
? 2、它們與其它的靜態方法實際上沒有任何區別。
? 幸運的事,還有第三種替代方法,就是Builder模式。不直接生成想要的對象,而是讓客戶端利用必要的參數調用構造器,生成一個Builder對象,然後在Builder對象上調用類似setter的方法,來設置每個相關的值。最後,客戶端利用無參的builder方法生成不可變對象。這種方式對於參數的增加比較靈活,易於閱讀,可以對參數增加約束條件。它也有自身的不足,比如在某些十分註重性能的情況下,它的開銷可能就成問題了。該模式比重疊構造器更加冗長,因此它只有在很多參數的時候才使用,特別是當大多數參數是可選的時候。
? 對於不可實例化的類,將它的構造器變成私有的。比如只包含靜態方法和靜態域的類。
? 類可以通過靜態工廠方法來提供它的客戶端,而不是通過構造器。
優勢:
? 1、它們有名稱,可以根據名稱將創建對象的行為表達的更清楚。
? 2、可以不必在每次調用它們的時候都返回一個新對象。這使得不可變類可以使用預先構建好的實例,或者將構建好的實例緩存起來,進行重復利用。
? 3、它們可以返回原返回類型的任何子類型的對象。API可以返回對象,同時又不會使對象的類變成公有的。以這種方式隱藏實現細節。
? 4、在創建參數化實例的時候,它們使代碼變得簡潔。
缺點:
? 1、類如果不含公有的或者受保護的構造器,就不能被子類化。
? 2、它們與其它的靜態方法實際上沒有任何區別。
二、遇到多個構造器參數時要考慮使用構建器。
大發彩_票平臺出租
地址一:【hubawl.com】狐霸源碼論壇
地址二:【bbscherry.com】
重疊構造器模式可行,但是當有許多參數的時候,客戶端代碼會很難編寫,並且難以閱讀。一長串類型相同的參數會導致一些微妙的錯誤。如果客戶端不小心顛倒了其中兩個參數的順序,編譯器也不會報錯,但是程序在運行時會出現錯誤行為。
? 這種情況下,另一種替代方法是使用JavaBean模式。通過setter方法設置必要參數。遺憾的是,這種模式自身有著很重要的缺點。因為構造過程被分到了幾個調用中,在構造過程中JavaBean可能處於不一致的狀態。與此相關的另一點不足在於,這種模式阻止了類做成不可變類的可能。
三#、用私有構造器或者枚舉類型強化Singleton屬性
?
四、通過私有構造器強化不可實例化的能力。
五、避免創建不必要的對象
? 本條目並不意味著“我們應該要盡可能地避免創建對象”。由於小對象的構造器只做很少量的顯示工作,創建和回收動作是非常廉價的。反之,通過維護對象池來避免創建對象並不是一個很好的做法,除非池中的對象是重量級的(典型例子就是數據庫連接)。
六*、消除過期的對象引用
?
七#、避免使用終結方法
Effective Java-創建 大發彩_票平臺出租 和銷毀對象