好的,这完全是语义和命名......但是,如果使用它来返回单例实例,我的实现仍然是工厂模式吗?
也就是说,如果它只构造一个新的实例一次,它是否仍然适合称为工厂:
// am I still a factory?
public static class SomeFactory
{
[ThreadStatic]
private static object _currentSomething;
public static object Something
{
get { return _currentSomething ?? _currentSomething = new object(); }
}
}
答案 0 :(得分:2)
答案 1 :(得分:1)
它看起来工厂,我认为这是最好的相似之处。看起来你正在努力建立一个Singleton工厂。但是有些事情感觉不对劲。
也许是因为它只会返回一个物体...除非你要做一些与众不同的事情。你打算用这个做什么?啊......我看,正如@LukeH所说,一个线程单身人士。
修改强> 我个人认为,正如所写,它是一种模式的模式。代码只能返回一个对象而只能一个对象。这就是我修改个人风格代码的方法。如果我的解释错了,请纠正我:
static void Main()
{
object obj1 = SomeFactory.Something;
Console.WriteLine("obj1 hash:{0}", obj1.GetHashCode());
object obj2 = SomeFactory.Something;
Console.WriteLine("obj2 hash:{0}", obj2.GetHashCode());
Console.Read();
}
public static class SomeFactory
{
[ThreadStatic]
private static object _currentSomething;
public static object Something
{
get
{
if (_currentSomething != null)
{
return _currentSomething;
}
else
{
_currentSomething = new object();
Console.WriteLine("Returning new object - hashcode: {0}", _currentSomething.GetHashCode());
return _currentSomething;
}
}
}
}
Writelines确认,但不成熟,我只在主线程上得到一个对象。很酷......但是使用其他自定义对象怎么样?
我会考虑这样的事情:
public static class GenericFactory<T> where T : new()
{
[ThreadStatic]
private static T _currentSomething;
public static object Something
{
get
{
if (_currentSomething != null)
{
return _currentSomething;
}
else
{
_currentSomething = new T();
Console.WriteLine("Returning new {0} - hashcode: {1}", _currentSomething.GetType(), _currentSomething.GetHashCode());
return _currentSomething;
}
}
}
}