我正在围绕一个我无法控制的类库编写一个包装器。在这个库中有一个类(我们称之为它Target
),我想确保它只被实例化一次,但它本身并不是一个单例。我想过像这样使用Singleton-Factory模式:
internal sealed class SingletonFactory
{
private static readonly SingletonFactory manager = new SingletonFactory();
private readonly Target target;
private static SingletonFactory() { }
private SingletonFactory()
{
target = new Target();
target.Init("foo");
}
internal static SingletonFactory Instance
{
get { return manager; }
}
internal Target Target
{
get { return target; }
}
}
然后我可以这样做:
var targetInstance = SingletonFactory.Instance.Target;
然后我想通过使工厂像这样完全静态来简化这一点:
internal static class StaticFactory
{
private static readonly Target target;
private static StaticFactory()
{
target = new Target();
target.Init("foo");
}
internal static Target Target
{
get { return target; }
}
}
并且对目标实例的访问变为:
var targetInstance StaticFactory.Target;
我很确定这StaticFactory
是线程安全的,并提供对目标类的单个实例的全局访问。这有什么我没有想到的问题吗?