2014-09-20 76 views
1

我一直在試圖編碼這樣的東西:瞭解如何使用單例模式?

1類創建一個類2(類t =新類())的實例。這個實例可以在1,2和3類中使用。 我一直在找東西,找到了「Singleton Pattern」。我不明白,我怎麼落實到我的代碼,這雖然和來源公正的幾個都在說不同的東西......

感謝您的幫助,非常感謝:)

+0

第3類與第1和第2類有什麼關係? – 2014-09-20 23:37:13

+0

試一試,發佈代碼,我們可以從那裏幫助你。你明白Singleton模式的目的是什麼嗎? – 2014-09-20 23:40:15

回答

2

辛格爾頓例子:如果你有一個班級電話簿,並且你想讓你的程序的每一個班級都指向同一個電話簿。您將使Class Phonebook成爲Singleton-Class。

換句話說:使用Singleton模式來確定每一個其他代碼是指單一類的同一個對象。

class Phonebook { 
    //Make the constructor private so no one can create objects, but this class 
    private Phonebook() { 
    } 
    // to static members to hold (m_Instance) and get (getInstacnce) the Singleton Instance of the class 
    private static Phonebook m_Instance; 
    public static Phonebook getInstance() { 
     if (m_Instance == null) { 
      // first call to getInstance, creates the Singelton Instance, only we (Phonebook) can call the constructor; 
      m_Instance = new Phonebook(); 
     } 
     return m_Instance; //always the same Instance of Phonebook 
    } 
    ... // Members of the Phonebook (add/getPhoneNumber) 
} 

軟件的每個部分都會得到相同的電話本實例。所以我們可以註冊phonenumbers,每隔一個班級都可以閱讀。

... 
Phonebook l_Phonebook = Phonebook.getInstance(); 
l_Phonebook.addPhoneNumber("Yoschi", "01774448882") 
... 
// somewhere else 
Phonebook l_Phonebook = Phonebook.getInstance(); 
Phone.getInstance().call(l_Phonebook.getPhoneNumber("Yoschi")); 
+1

在多線程環境中,創建必須同步。請參閱雙重檢查的鎖定設計模式。 – Matthias 2014-09-21 09:27:20

+0

是的!你的權利。但我不希望一切都變得複雜一次。 – GiCo 2014-09-21 12:19:39

1

下面是描述的鏈接:

http://en.wikipedia.org/wiki/Singleton_pattern

樣品代碼將是

public class singleton 
    { 
     public static singleton _obj; 
     private singleton() 
     { 
      // prevents instantiation from external entities 
     } 
     public static singleton GetObject() // instead of creating new operator, declare a method and that will create object and return it. 
     { 
      if (_obj == null) //Checking if the instance is null, then it will create new one and return it 
      //otherwise it will return previous one. 
      { 
       _obj = new singleton(); 
      } 
      return _obj; 
     } 
     public void printing(string s) 
     { 
      Console.WriteLine(s); 
     } 
    } 

這是一個C#代碼但其概念是一樣的java。

+1

OP標記的java。您的示例代碼是C#。 – 2014-09-21 00:02:37

+0

是的,我可以得到一個Java代碼。 – 2014-09-21 00:22:36