2013-02-20 29 views
2

我一直在谷歌搜索大約小時現在,我仍然沒有一個明確的想法,單身。任何人都可以讓我更清楚一點,也許發佈一個代碼示例?什麼是單身人士,用簡單的英語?

我只知道你只能有一個給定類的實例。但是,你不能只爲這個使用靜態類?

在此先感謝!

+0

檢查wiki和參考鏈接瞭解關於單身的章節。 http://en.wikipedia.org/wiki/Singleton_pattern – sudmong 2013-02-20 07:01:55

+0

http://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern – sudmong 2013-02-20 07:03:38

+1

如果一個類只有一個對象(實例),這個被稱爲「單例」。你可能會想到強制只有一個對象,但這是邪惡開始的地方。 – cybye 2013-02-20 07:14:37

回答

7

簡單的純英文版本是一個單例類,是隻有一個實例的類。

但是,你不能只爲那個使用靜態類嗎?

不。這不是Java中的「靜態」類。在Java中,「靜態」類可以像其他任何類一樣擁有多個實例。

使用static關鍵字(對於類)意味着嵌套類的實例不綁定到封閉類的特定實例。這意味着嵌套類中的表達式不能引用封閉類中聲明的實例變量。

在Java 1.5之前(又名Java 5),在Java中不支持單例設計模式。你只用普通的Java來實現它們;例如

/** There is only one singer and he knows only one song */ 
    public class Singer { 
     private static Singer theSinger = new Singer(); 
     private String song = "I'm just a singer"; 

     private Singer() { 
      /* to prevent instantiation */ 
     } 

     public static Singer getSinger() { 
      return theSinger; 
     } 

     public String getSong() { 
      return song; 
     } 
    } 

Java 1.5中引入了enum類型可以用來實現單身等

/** There are two Singers ... no more and no less */ 
    public enum Singer { 
     DUANE("This is my song"), 
     RUPERT("I am a singing bear"); 

     private String song; 

     Singer(String song) { 
      this.song = song; 
     } 

     public String getSong() { 
      return song; 
     } 
    } 
+1

+1:最後有人用簡單的英文寫出了最簡單的答案。 – 2013-02-20 07:18:47

+0

您的代碼示例讓我對所有事情都很清楚。非常感謝你 – Tiwaz89 2013-02-20 07:45:01

0

單例模式是一種設計模式,它將類的實例化限制爲一個對象。

注類的簡單的靜態實例和 單之間的區別:雖然一個單可以作爲靜態 實例來實現,它也可以被懶惰地構成,不需要存儲器或 資源,直到需要。另一個值得注意的區別是,靜態成員類不能實現一個接口,除非該接口只是一個標記 。因此,如果班級必須通過界面實現 合同,那麼它確實必須是單身人士。

所有的Wikipedia