Java Q&A: 使用Singleton模式?給我一個理由先! (轉)

worldblog發表於2007-12-09
Java Q&A: 使用Singleton模式?給我一個理由先! (轉)[@more@]

Q&A: 使用Singleton?給我一個理由先!

Q: 在很多地方我都看到使用了Singleton類。我的問題是:較之一個包含static方法(methds)的類,使用Singleton具有什麼優點呢?

A: 不使用包含static方法的類而使用Singleton,其區別在於,後者可以帶來有效的面向設計。Singleton通常展示的是一種更清晰的方法。而一個包含static方法的類只不過是或公用子(utilities)的簡單羅列。

你會問,羅列一組函式有什麼問題?

很簡單。羅列函式,你就不是在進行物件導向;你的工作實際上倒退到了傳統的程式導向的中。悄然之間,物件不再是程式的焦點,而你自己也陷入到以資料為中心的程式設計模式中。換句話說,你不再是向包裝了狀態和行為的物件傳送訊息,而是針對資料進行函式。公用子程式必然造成行為和資料完全分離,而這一點在物件導向設計中是絕不允許的。

也不是說完全不能使用公用子程式。物件導向的公用子程式確實存在。有時也需要將物件當作資料來處理。例如,我曾寫了一套公共子程式,用來將Java物件轉換成相應的形式。很難將那些方法寫成一個類,因為它們確實沒有狀態資訊;我也不想將轉換程式碼嵌入到Java類中。然而,這確實容易帶來混亂。

對於中的某個類,如果想讓它無論什麼時候只有一個例項存在,這種情況下可以使用Singleton。例如有這樣一個類,它提供對CORBA server的訪問,還要做到負載平衡。這時候就不要使用多個這樣的物件,因為每個物件都會和相同的server打交道。佔用冗餘資源當然浪費。所以,對server的訪問最好集中到一個例項之中。

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990024/,如需轉載,請註明出處,否則將追究法律責任。

相關文章