crossplatform.ru

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


  Ответ в Обсуждение шаблонов (patterns) проектирования
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
ViGOur Дата 7.4.2009, 22:56
  Не совсем понял, что имеется ввиду. :)
LE0N Дата 7.4.2009, 21:58
 
Цитата
или туда или туда.

Имелось ввиду, что код, который ты собираешься модифицировать, уже написан и везде использован один экземпляр класса.
А модификация нужна для рефакторинга, либо для масштабирования своего проекта.
Подумай на досуге.... Нужен ли тебе такой плюс вместо пары строк копи-паста...
ViGOur Дата 7.4.2009, 17:33
  Это точно, что задача притянута, в приведенной тобой задаче это реализуется таким путем:
class CStore {};
class CStoreFile  : public CStore {};
class CStoreBd   : public CStore {};

В CSessionManager используется указатель на CStore, ну и за счет полиморфизма сохраняется или туда или туда.
:)
LE0N Дата 7.4.2009, 17:21
 
Цитата
LE0N, может быть я что-то не понимаю, но в каком случае нужно будет и что менять?

Ну вот захочу я, например, хранить сессии не в файле, а в БД (общая база в локалке).
А механизм с файлами будет использоваться ещё в одном месте - т.к. функционал сессионМенеджера полностью подходит.
Задача, конечно, притянута за уши, но, я думаю, суть понятна...
ViGOur Дата 7.4.2009, 8:41
 
Цитата(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, может быть я что-то не понимаю, но в каком случае нужно будет и что менять?
LE0N Дата 6.4.2009, 21:01
 
Цитата
Я тоже так пологал, пока не попробовал работать с "Одиночкой".

А я с ним работал в течение года. Теперь вот плююсь....
Litkevich Yuriy Дата 6.4.2009, 18:15
 
Цитата(LE0N @ 6.4.2009, 22:05) *
Почему это не вяжется?
Всё просто - вместо singleton::get_instance(), передавать в тот же конструктор класса, его использующего ссылку на данный объект.
однако делегирование и передача ссылки/указателя не одно и тоже.
Что же касается использования ссылки на объект вместо "Одиночки". Я тоже так пологал, пока не попробовал работать с "Одиночкой".
На практике оказалось удобнее использовать "Одиночку"

Подобная вещь используется и в Qt - QSqlDatabse - подобен "Именованному Одиночке"
LE0N Дата 6.4.2009, 18:05
 
Цитата
твое фанфаронство уже не развлекает, а раздражает.

Слив засчитан.
Цитата
Приведи код, который может помочь обойтись в 99% случаев без синглтонов.

А зачем? У синглтона есть один огромный недостаток - если захотелось заменить класс, который используется на данный момент, нужно менять либо сам синглтон, либо лезть в класс его использующий и заменять точку входа. (Теряется такая важная вещь в ООП как полиморфмизм)
И проектировщик системы не может гарантировать того, что наследование там не нужно на 100%.
Ещё я бы посоветывал почитать про "антипаттерны"....
Цитата
помоему одно с другим как-то не вяжется.

Почему это не вяжется?
Всё просто - вместо singleton::get_instance(), передавать в тот же конструктор класса, его использующего ссылку на данный объект.
Когда я перестал юзать синглтоны, у меня сильно возросла реюзабельность кода.
На мой взгляд, синглтон - это стремление к функциональному программированию. ООП здесь даже и не пахнет. Всё, что в нём осталось от ООП - это инкапсуляция.
ViGOur Дата 6.4.2009, 8:34
 
Цитата(LE0N @ 6.4.2009, 0:05) *
В 99% лучше обойтись делегированием чем теми же синглтонами.
Приведи код, который может помочь обойтись в 99% случаев без синглтонов. :)

Цитата(trdm @ 6.4.2009, 1:13) *
твое фанфаронство уже не развлекает, а раздражает.
Спокойней нужно быть. ;)
trdm Дата 6.4.2009, 0:13
 
Цитата(LE0N @ 6.4.2009, 0:05) *
Цитата
у меня другие ощущения и опыт.
после изучения патернов стало легче понимать чужой код, легче принимать решения по архитектуре
и что уж совсем приятно и удивительно, стал меньше переписывать собственные "поделки".

Объём этих "поделок" какой ?
В 99% лучше обойтись делегированием чем теми же синглтонами. Гибкость кода становится лучше в разы.
По поводу фабрик - так не читая про паттерны можно без проблем к ним придти. Ну а про обзерверы и прочую байду вообще речи быть не должно. Самые первые вещи, которые получаются при определённых заданиях.

твое фанфаронство уже не развлекает, а раздражает.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 18:32