如何从一个项目到另一个项目实现单例

时间:2010-06-04 04:32:03

标签: c# singleton

我正在开发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()
{
}
}

3 个答案:

答案 0 :(得分:0)

Singleton模式的想法是使用相同的对象而不是创建一个新对象。除了代码片段中的所有语法错误之外,您不应该尝试创建“新”单例。而不是在B类,你应该有这样的一行: private Singleton singleton = Singleton.Instance; 你编写它的方式,它不会编译,因为在B类中看不到Singleton的构造函数。

答案 1 :(得分:0)

首先,如果您在项目之外公开此项,请考虑使用Abstract Factory Pattern而不是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
    }
}

但是,您应该预先警告,这会在Singleton和B之间产生非常紧密的耦合(几乎是死锁),这意味着您(作为库创建者)必须知道将使用它的每个B类。在这里考虑一个非常不同的设计,因为这是实现Singleton的一种可怕方式。我几乎不想发布这个代码,但我正在这个免责声明。

答案 2 :(得分:-1)

你在这里写的代码应该有用(肯定Instence是我想的方法吗?..),不同的项目也不应该成为问题,因为你到处都有公共访问者,需要的地方。可能你有一点不同的问题?