![]() |
|
||||||||||
|
|||||
|
Хотелось бы узнать как часто вы используете паттерн Singleton. И в каких случаях. Вопрос навеян впечатлением, что я его использую слишком часто. Интересно услышать ваше мнение по этому поводу, поделитесь опытом.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Недавно в блогах была статья и обсуждение http://www.flasher.ru/forum/blog.php?b=286
|
|
|||||
|
udaaff, да, я читал это. Вопрос немного в другом. В том числе в статистике.
Вот у меня есть проект, там в качестве одиночек выступают классы, которые: 1) Управление хранением ряда данных (игровые очки, битмапы и т.п.) 2) Управление таймером 3) Управление SharedObject 4) Управление звуками (при чем данный класс можно разделить на 2, т.к. звуки отдельно управляются в зависимости, являются ли они эффектами или просто фоновой музычкой) 5) Обмен данными с серваком 6) Глобальный трэйсер (спрайт, который добавляется в самом начале, содержит текстовое поле, куда можно писать логи, которые можно (проще) отследить только при работе приложения с сайта) 7) Управление настройками 8) ...? возможны еще варианты Меня лично такое количество одиночек начинает пугать. Вот я и задумался об адекватности такой структуры. С одной стороны да, все эти классы должны быть в единственном экземпляре, т.е. то самое основное предназначение одиночки. С другой - становится страшно от такого изобилия. Как вариант сделать одиночку, который бы содержал в себе все эти классы и доступ был бы типа такого: Да, я знаю, что тема замызгана до смешного, но хотелось бы для себя разобраться, все ли я правильно делаю.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
Ну, имхо, единая точка для разных сингелтонов лучше не сделает... Только усложнит синтаксис, и вероятность возникновении ошибки при написании "название_нужного_класса".
Предпочитаю код аля: Вообще не вижу тут проблем, у меня самого похожий набор синглтонов, причем большая часть из них яляеются библиотечными классами, мигрирующими из проекта в проект без изменений. К твоему списку могу добавить систему локализации.
__________________
Искренне Ваш, Джек. |
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Если мне не изменяет память, то я ни разу им не пользовался, ыы. Вообще недолюбливаю статичные методы и переменные.
Разве что глобальный трейсер-логгер, который уже давно написан, но как бы и он без использования синглтона... зачем? |
|
|||||
|
Bgg, ну из статичных там получается только одна булевая переменная на один класс, т.е. отрицательнре влияние статики стремиться к нулю.
И если ими не пользуешься, то как выходишь из ситуации? Вот к примеру ситуация: настройки звука хранятся в абсолютно разных местах, в абсолютно разных классах (я на своей памяти таких мест более 2х не встречал, но теоретически их может быть и больше, т.к. настройки звука - только в качестве примера) Как бы реализовал это без одиночки? JackFromChaos, ошибки не будет, т.к. "название_нужного_класса" будет выноситься в статические переменные. А по коду немного не понял что к чему.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
strange mood
|
Я пользуюсь синглтонами довольно редко. Я нашел их применение в качестве интерфейса к заведомо единственным сущностям, таким как звук, клавиатура или SharedObject.
Делать синглтоном класс для работы с сервером, скажем, не вижу особого смысла: вдруг приложению понадобится работать с несколькими разными серверами? Даже если не понадобится, при создании еще одного экземпляра такого класса ничего не сломается, конфликтов не возникнет - все по-прежнему будут пользоваться ссылкой на нужный экземпляр.Зачем вообще может понадобиться синглтон? Мне кажется, основная причина - его глобальная доступность. Здесь я предпочитаю выбрать инкапсуляцию: те, кому объект нужен, получат на него ссылку, а остальные пускай не суются. В общем, моя философия такая: без необходимости синглтоны не делать, ибо результат получится тот же, а разводить архитектуру ради архитектуры - лишняя трата времени.
__________________
тонкий тролль, осеянный благодатью Последний раз редактировалось Gaen; 31.12.2010 в 19:00. |
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Цитата:
Если ты про проигрывание звука, то пользовался бы событиями: звуковой контроллер находится в главном контроллере и слушает определенные типы событий, и на основе типа события или event.target'а воспроизводит тот или иной звук. Так же и события выключения звука, громкости и прочих настроек. |
|
|||||
|
Если на собеседовании претендент утверждает, что знает шаблоны и из всего списка имеющихся приводит только синглтон, то это значит что он их не знает вовсе =)
У синглтона плюсы небольшие, но минусы огромные. Лично я стараюсь не использовать.
__________________
Сам себе репортер |
|
|||||
|
GAIKER, сервер - да, просто задача немного специфическая.
Цитата:
Цитата:
Цитата:
Цитата:
Bgg, громкость-то настраивается в одном классе, а результаты настроек отображаются в нескольких.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:03. |
|
|
« Предыдущая тема | Следующая тема » |
|
|