2010-06-04 50 views
0

我正在開發Windows窗體應用程序。我需要實現單身設計模式。當在兩個類中使用同一個包實現單例時,它可以正常工作,但只需爲該類中的兩個類創建對象,就可以在不同包中實現兩個類。我怎樣才能實現呢?這裏是代碼:如何從一個項目實現單身到另一個項目

public class Singleton 
{ 
    private static Singleton instance; 
    B b=new B(); 
    private Singleton() {} 

    public static Singleton Instance 
    { 
     get 
     { 
     if (instance == null) 
     { 
      instance = new Singleton(); 
     } 
     return instance; 
     } 
    } 

public void a() 
{ 
} 
b.c(); 
} 


public class B 
{ 
SingleTon single=new SingleTon.Instance; 
single.a() 
public void c() 
{ 
} 
} 
+2

「不工作」不足以解釋您在那裏做什麼。 – zerkms 2010-06-04 04:40:19

+1

給我看一些代碼。 – 2010-06-04 04:40:49

+0

注意你在你的B類中使用SingleTon時,實際上它的名字是Singleton。 c#中的名字區分大小寫。 – Arseny 2010-06-04 06:48:23

回答

-1

你寫到這裏應該工作的代碼(?肯定Instence是方法我想..),也不同項目不應該是一個問題,因爲你有公共的訪問無處不在,在哪裏需要。可能你有點不同的問題?

+0

-1這段代碼甚至不會編譯,更不用說「應該工作」。 – drharris 2010-06-04 20:07:46

0

Singleton模式的想法是使用相同的對象,而不是創建一個新的。除了你的代碼片段中的所有語法錯誤之外,你不應該試圖創建一個'新'Singleton。相反,在B類,你應該有這樣一行: private Singleton singleton = Singleton.Instance; 你寫它的方式,它不會編譯,因爲辛格爾頓的構造是不是在B類可見

0

首先,如果你是這個暴露的外項目,請考慮使用抽象工廠模式而不是Singleton。看看我的own question爲什麼這可能會失控。

但是,如果你必須從小事做起:

public class Singleton 
{ 
    private static Singleton instance = new Singleton(); 
    private Singleton() { } 
    public static Singleton Instance { get { return instance; } } 
    public void a(B b) 
    { 
     b.c(); 
    } 
} 

public class B 
{ 
    static void Main() 
    { 
     B b = new B(); 
     Singleton.Instance.a(b); 
    } 

    public void c() 
    { 
     // whatever you want it to do 
    } 
} 

但是,你應該諒解,這將創建辛格爾頓和B之間的非常緊密的耦合(幾乎死鎖),這意味着你(作爲庫創作者)必須知道每個將使用此類的B類。考慮一個非常不同的設計,因爲這是一個可怕的方式來實現Singleton。我甚至不願意發佈這些代碼,但是我在這個免責聲明中是這樣做的。

相關問題