Здравствуйте, Cyberax, Вы писали:
C>Что можно инициализировать в stateless-синглтоне?
C>Интерфейс — это уже интереснее. Но я слабо представляю когда это нужно.
Зависит от синглтона. Возьмём конкретный, близкий почти всем, пример — журналирование.
Вызов Logger.Log(string message) очевидно не меняет состояния Logger, потому что у него нет никакого состояния. В терминах Си++ это
class Logger
{
public:
void Log(string message) const;
}
С другой стороны в процессе инициализации я могу захотеть открыть файл, сокет, соединение с БД и т.д.
Что касается интерфейса, в зависимости от настроек приложения, системы, аппаратной конфигурации могут возвращаться разные версии синглтона. То есть для
interface ILogger
{
public:
virtual void Log(string message) const = 0;
}
Могут быть возвращены LoggerRuRu, LoggerEnUs, LoggerOptimizedForPentium4, LoggerWithSelfTrace и т.п. Естественно, что для того кто использует синглтон это должно быть скрыто. Интерфейсы тут помогают.