Это выглядит фабрикой, и я думаю, что это лучшее из сходства. Похоже, вы пытаетесь создать Синглтон Фабрику. Но в этом есть что-то, что кажется неправильным.
Может быть потому, что он только когда-нибудь вернет объект ... если вы не собираетесь делать что-то другое. Что вы планируете делать с этим? Ах ... Я вижу, как говорит @LukeH, синглтон-нить.
EDIT:
Мое личное мнение заключается в том, что, как написано, это шаблон для шаблона. Код ничего не может сделать, кроме как вернуть объект и только объект. Вот как я изменил код для личного стиля. Пожалуйста, поправьте меня, если я ошибаюсь с моей интерпретацией:
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;
}
}
}
}
Письменные строки подтверждают, хотя и элементарно, что я получаю только один объект в главном потоке. Круто ... а как насчет использования других пользовательских объектов?
2-е редактирование:
Я бы рассмотрел что-то вроде:
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;
}
}
}
}