2012-09-04 41 views
1

任何人都可以告訴我這是否是單身課程嗎?Singleton class Identification

public class Final_output{ 

    Cafe_factory obj=null; 

    private Final_output() 
    { 
    obj = new Cafe_factory(); 
    obj.getOrder("French Fries"); 
    obj.getOrder("Biryani"); 
    obj.getOrder("Ice-cream"); 
    } 

    public static void main(String args[]) 
    { 
    new Final_output(); 
    } 
} 

Cafe_factory是同一個包中的另一個類。

+3

這是不是一個單..這只是任何其他正常的單機類 –

+3

作爲一個側面說明,它是[標準約定](http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367)爲Java類名使用TitleCase(無下劃線)。 –

+0

Java世界中的單例模式不是反模式(誠實的問題)? – PeeHaa

回答

9

這不是Singleton

辛格爾頓例是:

public class Singleton { 
    private static final Singleton instance = new Singleton(); 

    private Singleton() {} 

    public static Singleton getInstance() { 
     return instance; 
    } 
} 
+0

然後,您將如何創建一個單獨類Final_output,它可以創建類Cafe_factory的對象並通過使用同一個對象調用其(cafe_factory)函數。 –

+1

另請參閱Joshua Bloch的'enum'單例模式(Effective Java 2nd edition,Item 3,或[here](http://www.informit.com/articles/article.aspx?p=1216151&seqNum=3))。 –

+0

你需要實施cafe_factory作爲Singleton或Final_output,在你每次調用新的Final_output()的情況下。你創建一個實例,創建一個cafe_factory的新實例。 – CloudyMarble

2

不,不是這樣的。因爲您無法在其外創建此類的實例(至少應存在一個實例)。另一方面 - 您可以根據需要在main內創建儘可能多的實例(因此它也不是單例)。

這裏是單件的一個例子:不

public class MySingleton{ 
    private MySingleton(){} 

    private static InstanceHolder{ 
     private static final MySingleton instance = new MySingleton(); 
    } 

    public static MySingleton getInstance(){ 
     return InstanceHolder.instance; 
    } 
} 
3

及其。

單例的目標是將可創建的同一類的實例數限制爲1,並提供靜態方法來檢索此實例。

這通常是通過私有構造函數和靜態方法來檢索這個唯一的實例。這裏既沒有Final_output也沒有Cafe_factory尊重這個合同,所以他們都沒有使用單身模式。

+0

根據你的解釋 - 他的班**是** singleton :) –

+0

確實,編輯:),謝謝 – jolivier

1

由於您可以在Final_output類之外的代碼中創建n個新的Cafe_Factory對象,因此它不是單例。永遠不會使用新關鍵字創建單例。相反,您可以通過靜態方法獲取它的一個實例。

-1

不,這不是一個Singleton

public class Final_output{ 
    private static Final_output ourInstance = new Final_output(); 
    Cafe_factory obj=null;  

    private Final_output() { 
    obj = new Cafe_factory(); 
    obj.getOrder("French Fries"); 
    obj.getOrder("Biryani"); 
    obj.getOrder("Ice-cream"); 
    } 

    public Final_output getINstance(){ 
     return ourInstance; 
    } 

} 
+0

你爲什麼複製他的問題? –

+0

錯誤地提交了... – twid

+2

現在它更糟:)仔細看看你的'getINstance()'。 –

0

這樣的:

public class Final_output{ 

    private static Cafe_factory obj = null; 

    private Final_output() 
    { 
     obj = getCafeInstance(); 
    } 

    public static getCafeInstance(){ 
     if(null == obj){ 
      obj = new Cafe_factory(); 
      obj.getOrder("French Fries"); 
      obj.getOrder("Biryani"); 
      obj.getOrder("Ice-cream"); 
      }else{ 
       return obj; 
      } 
    } 

    }