Java Q&A: 使用Singleton模式?給我一個理由先! (轉)
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java Q&A: 使用Observer模式 (轉)JavaServer模式
- Java Q&A: 使用Factory Method模式 (轉)Java模式
- 給我一個你不用tailwindcss的理由!AICSS
- Windows使用者:請給我個嘗試Linux的理由WindowsLinux
- 請給我一個使用Struts的理由。 (我從專案工程開發經驗談拷過來的)
- 重新使用Java的七個理由Java
- 設計模式 - Singleton in Java設計模式Java
- 關於singleton模式的一個問題?模式
- 怎麼使用EJB來達到singleton模式 (轉)模式
- java設計模式-單例模式SingletonJava設計模式單例
- 一天一個設計模式(二) - 單例模式(Singleton)設計模式單例
- Java設計模式——單例模式(Singleton pattern)Java設計模式單例
- Java設計模式之單例模式(Singleton)Java設計模式單例
- laravel singleton 單例模式使用Laravel單例模式
- 我們選擇java的理由Java
- Singleton模式之Delphi實現 (轉)模式
- Java 排名第一的4個理由Java
- Java設計模式之單例模式(Singleton Pattern)Java設計模式單例
- JAVA設計模式之 單例模式【Singleton Pattern】Java設計模式單例
- 設計模式、用Delphi實現---->Singleton 模式 (轉)設計模式
- 我痛恨 Git 的 10 個理由Git
- Java singleton 一例Java
- C++完美實現Singleton模式[轉]C++模式
- singleton模式的一種變體:double-checked locking (轉)模式
- C++設計模式:Singleton的模板實現之一 (轉)C++設計模式
- Scala 與設計模式(一):Singleton 單例模式設計模式單例
- PHP設計模式(一)—單例模式(Singleton Pattern)PHP設計模式單例
- JScript下Singleton模式的實現。 (轉)JS模式
- 兩種Delphi實現Singleton模式方法 (轉)模式
- 高手 高手 高手 給我一個答案
- 使用AngularJS開發我們下一款Web應用的七個理由AngularJSWeb
- 給自己一個定位 (轉)
- 避免在Java 介面中使用陣列的3 個理由Java陣列
- 避免在Java介面中使用陣列的3個理由Java陣列
- [java設計模式]工廠設計模式,給物件一個合法的生產渠道。Java設計模式物件
- 我學習使用java的一點體會 (轉)Java
- 面試 Q&A (一)面試
- mamute是一個類似stackoverflow的Q&A問答系統Java引擎Java