我正在开发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()
{
}
}
答案 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是我想的方法吗?..),不同的项目也不应该成为问题,因为你到处都有公共访问者,需要的地方。可能你有一点不同的问题?