crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Обсуждение шаблонов (patterns) проектирования, отделено от темы "Литература по патернам проектирования"
LE0N
  опции профиля:
сообщение 6.4.2009, 21:01
Сообщение #11


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
Я тоже так пологал, пока не попробовал работать с "Одиночкой".

А я с ним работал в течение года. Теперь вот плююсь....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 7.4.2009, 8:41
Сообщение #12


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(LE0N @ 6.4.2009, 19:05) *
А зачем? У синглтона есть один огромный недостаток - если захотелось заменить класс, который используется на данный момент, нужно менять либо сам синглтон, либо лезть в класс его использующий и заменять точку входа. (Теряется такая важная вещь в ООП как полиморфмизм)
Думаю если так, тогда что-то у вас не так с планированием! :)

Например есть у нас классы:
Пример
class CSingleton
{
private:
   CSingleton *m_p;

private:
   CSingleton
   virtual ~CSingleton
   CSingleton( CSingleton &r)
   CSingleton &operator=( CSingleton &r)

public:
   static CSingleton *Init();
   static void destroy();
};

class CSessionManager: public CSingleton
{
   // ...
};
LE0N, может быть я что-то не понимаю, но в каком случае нужно будет и что менять?

Сообщение отредактировал ViGOur - 7.4.2009, 8:42
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 7.4.2009, 17:21
Сообщение #13


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
LE0N, может быть я что-то не понимаю, но в каком случае нужно будет и что менять?

Ну вот захочу я, например, хранить сессии не в файле, а в БД (общая база в локалке).
А механизм с файлами будет использоваться ещё в одном месте - т.к. функционал сессионМенеджера полностью подходит.
Задача, конечно, притянута за уши, но, я думаю, суть понятна...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 7.4.2009, 17:33
Сообщение #14


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Это точно, что задача притянута, в приведенной тобой задаче это реализуется таким путем:
class CStore {};
class CStoreFile  : public CStore {};
class CStoreBd   : public CStore {};

В CSessionManager используется указатель на CStore, ну и за счет полиморфизма сохраняется или туда или туда.
:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 7.4.2009, 21:58
Сообщение #15


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
или туда или туда.

Имелось ввиду, что код, который ты собираешься модифицировать, уже написан и везде использован один экземпляр класса.
А модификация нужна для рефакторинга, либо для масштабирования своего проекта.
Подумай на досуге.... Нужен ли тебе такой плюс вместо пары строк копи-паста...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 7.4.2009, 22:56
Сообщение #16


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Не совсем понял, что имеется ввиду. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 9:01