Re[6]: Monostate
От: rm822 Россия  
Дата: 27.07.10 09:45
Оценка:
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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.