E>Ну т.е. monostate — это исключительно обертка над синглетоном.
нет, это разные концепции
синглтон однозначно связывает тип с единственным его экземпляром. Стейт однозначно связывается с поведением.
Моностейт
разделяет состояние и поведение.
Обычно использование моностейта более выгодно если к нему много обращений, т.к. растет потребность в небольших вариациях поведения
как к примеру выглядит запись в лог в контексте какого-то класса
вариант с синглтоном
class MyClass
{
void Log(PCWSTR message)
{
std::wstringstream ss;
ss << //пишем контекст this
ss << message;
Logger::Instance().Write(ss.str());
}
void Meth()
{
Log(L"Entering meth...");
....
}
}
очевидный минус — мы слегка изгадили дизайн, возложив на MyClass логирование
используя моностейт этот недостаток можно исправить
class MyClassLogger: public Logger
{
void operator()(MyClass* ctx, PCWSTR message)
{
std::wstringstream ss;
ss << //пишем контекст ctx
ss << message;
Write(ss.str());
}
}
class MyClass
{
MyClassLogger log;
void Meth()
{
log(this, L"Entering meth...");
....
}
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>