Я думал о классической проблеме ленивой одиночной инициализации - весь вопрос неэффективности:
if (instance == null)
{
instance = new Foo();
}
return instance;
Любой, кто знает, что такое синглтон, знаком с проблемой (вам нужно только один раз). Это банально, но раздражает.
Итак, я подумал о альтернативном решении, по крайней мере, для .NET (хотя оно должно работать где угодно
у которого есть некоторый эквивалент указателям на функции:
public class Foo
{
private delegate Foo FooReturner();
private static Foo innerFoo;
private static FooReturner fooReturnHandler = new FooReturner(InitialFooReturner);
public static Foo Instance
{
get
{
return fooReturnHandler();
}
}
private static Foo InitialFooReturner()
{
innerFoo = new Foo();
fooReturnHandler = new FooReturner(NewFooReturner);
return innerFoo;
}
private static Foo NewFooReturner()
{
return innerFoo;
}
}
Вкратце - экземпляр возвращает метод делегата. Делегат изначально настроен на метод
который инициализирует ваш экземпляр, затем изменяет делегат так, чтобы он указывал на простой метод Return.
Теперь мне нравится думать, что я не ужасен на своей работе, но у меня нет претензий к тому, что я потрясающий. Я нигде не видел пример этого кода.
Эрго, я прихожу к выводу, что мне чего-то не хватает. Нечто важное. Либо, что вся проблема слишком тривиальна, чтобы думать о ней слишком много, либо это делает что-то ужасное, что разрушит вселенную. Или я не в поиске и поэтому не видел
сотни разработчиков, использующих этот метод. Во всяком случае, что-то.
Я надеялся, что хорошие люди здесь, в Stack Overflow, могут подсказать мне, что (оставляя в стороне спор о том, следует ли вообще использовать Singleton).
РЕДАКТИРОВАТЬ для уточнения:
Это не код производительности (хотя, если дизайн активно снижает производительность по сравнению с традиционной моделью, было бы интересно узнать).
Он был написан исключительно как доказательство концепции, и я также понимаю, что он не является потокобезопасным, как должно быть. Есть ли какая-то причина, по которой он НЕ может быть поточно-ориентированным по самой своей природе?