關(guān)于這個(gè)問(wèn)題,下面是一些同仁的觀點(diǎn):
觀點(diǎn)一:(單例)
單例模式比靜態(tài)方法有很多優(yōu)勢(shì):
首先,單例可以繼承類(lèi),實(shí)現(xiàn)接口,而靜態(tài)類(lèi)不能(可以集成類(lèi),但不能集成實(shí)例成員);
其次,單例可以被延遲初始化,靜態(tài)類(lèi)一般在第一次加載是初始化;
再次,單例類(lèi)可以被集成,他的方法可以被覆寫(xiě);
最后,或許最重要的是,單例類(lèi)可以被用于多態(tài)而無(wú)需強(qiáng)迫用戶只假定唯一的實(shí)例。舉個(gè)例子,你可能在開(kāi)始時(shí)只寫(xiě)一個(gè)配置,但是以后你可能需要支持超過(guò)一個(gè)配置集,或者可能需要允許用戶從外部從外部文件中加載一個(gè)配置對(duì)象,或者編寫(xiě)自己的。你的代碼不需要關(guān)注全局的狀態(tài),因此你的代碼會(huì)更加靈活。
觀點(diǎn)二:(靜態(tài)方法)
靜態(tài)方法中產(chǎn)生的對(duì)象,會(huì)隨著靜態(tài)方法執(zhí)行完畢而釋放掉,而且執(zhí)行類(lèi)中的靜態(tài)方法時(shí),不會(huì)實(shí)例化靜態(tài)方法所在的類(lèi)。如果是用singleton, 產(chǎn)生的那一個(gè)唯一的實(shí)例,會(huì)一直在內(nèi)存中,不會(huì)被GC清除的(原因是靜態(tài)的屬性變量不會(huì)被GC清除),除非整個(gè)JVM退出了。這個(gè)問(wèn)題我之前也想幾天,并且自己寫(xiě)代碼來(lái)做了個(gè)實(shí)驗(yàn)。
觀點(diǎn)三:(
Good!)
由于DAO的初始化,會(huì)比較占系統(tǒng)資源的,如果用靜態(tài)方法來(lái)取,會(huì)不斷地初始化和釋放,所以我個(gè)人認(rèn)為如果不存在比較復(fù)雜的事務(wù)管理,用singleton會(huì)比較好。個(gè)人意見(jiàn),歡迎各位高手指正。
拋磚引玉,請(qǐng)不吝賜教!
--------------------
WE準(zhǔn)高手
posted on 2008-01-22 10:46
大衛(wèi) 閱讀(20167)
評(píng)論(11) 編輯 收藏 所屬分類(lèi):
Java