Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.10.2014, 13:50
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от terminator-101
 
Регистрация: 14.10.2014
Сообщений: 117

Зачем нужны синглтоны?
Я имею в виду в JS. Я прочитал чуток про них, пишут что это класс который имеет только один экземпляр. А зачем это нужно? Не проще ли сразу просто создать объект? А если нужна инкапсуляция, просто закрыть его в замыкании?
Ответить с цитированием
  #2 (permalink)  
Старый 14.10.2014, 14:09
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ну во-первых, синглтон - шаблон для языков программирования в целом.
Не во всех же языках можно взять и создать объект с методами, как в js.
Во-вторых, ты говоришь "сразу просто создать объект". Но в примерах синглтонов, наоборот, применяют отложенную инициализацию..
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 14.10.2014, 14:16
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от terminator-101
 
Регистрация: 14.10.2014
Сообщений: 117

Сообщение от danik.js
Но в примерах синглтонов, наоборот, применяют отложенную инициализацию..
А зачем она нужна? Например?
Ответить с цитированием
  #4 (permalink)  
Старый 14.10.2014, 14:20
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Например, чтобы отложить инициализацию..
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 14.10.2014, 14:21
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от terminator-101
 
Регистрация: 14.10.2014
Сообщений: 117

Сообщение от danik.js
отложить инициализацию
Не, ты же говоришь об отложенной инициализации самого синглтона? Я про это.
Ответить с цитированием
  #6 (permalink)  
Старый 14.10.2014, 14:24
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

https://ru.wikipedia.org/wiki/%D0%9E...86%D0%B8%D1%8F
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 14.10.2014, 14:54
Аспирант
Отправить личное сообщение для voral Посмотреть профиль Найти все сообщения от voral
 
Регистрация: 03.10.2014
Сообщений: 67

Сообщение от terminator-101
А зачем она нужна? Например?
На JS пока ни разу не понадобилось. А так. А зачем создавать объект если он не нужен.... Вот и создается при первом обращении. При этом само описание класса гарантирует, что будет существовать только один объект. Скрываются конструкторы (включая копирование).

При этом мы не расходуем ресурсы на его создание на каждом хите. А только если наступило то событие когда он действительно нужен. При этом нам не надо везде по коду проверять существует он или нет - просто используем метод предназначенный для получения ссылки.
Ответить с цитированием
  #8 (permalink)  
Старый 14.10.2014, 16:13
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

У тя есть 100500 виджетов, каждый хочет общаться с БД, но прямой доступ мы ему не даём, поэтому он общается со специальный драйвером, но если каждый виджет начнёт создавать 100500 драйверов, то это будет не эффективно, а с другой стороны если виджет начнёт много знать и структуре приложения и как то проверять создание экземпляра драйвера, то это будет плохо с точки зрения архитектуры, поэтому удобно юзать синглтоны: виджет "как будто" создаёт свой экземпляр, но на деле всё сводится к одному единственному.
__________________
kobezzza
code monkey
Ответить с цитированием
  #9 (permalink)  
Старый 14.10.2014, 20:47
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Влезу.

Сообщение от terminator-101
Не, ты же говоришь об отложенной инициализации самого синглтона? Я про это.
синглетона не существует, есть метод который выполняется один раз и в дальнейшем просто выдает результат - единственную и неповторимую проперть или инстансь.

Как пишут на русской википедии - невозможно задать порядок инициализации. Так вот если вы замечаете такие симптомы, то скорее всего у вас логика нарушена. Если с логикой все более-менее, то порядок инициализации on-demand никого не колебет.

Это не десктоп, это серверные-клиентские скрипты - пронесся и умер. Чем быстрее тем лучше.
Ответить с цитированием
  #10 (permalink)  
Старый 14.10.2014, 20:52
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Самым типичным синглетоном является линк к драйверу БД. Не будете же коннектиться в каждой функции. Ну вот, делается линк и втыкается в такую волшебную проперть под геттером - если она есть - выдается, если нет - подключается класс, делается инстансь, коннект, сохраняется, выполняется, возвращается - теперь только юзай.

В результате можно заранее понатыкать х знает сколько и ничем не пользоваться если не надо. У меня со старых проектов заезжают такие тычки в новые и торчат никому не мешая, пока не вызовешь и не обломишься без соответствующего класса.

Паттерн сиглетона - мутант между статикой и динамикой, можно считать кешированием.

Последний раз редактировалось kostyanet, 14.10.2014 в 20:56.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как спросить, чтобы вам ответили Илья Кантор Общие вопросы Javascript 1 31.07.2014 21:58
Зачем мне нужны аргументы функции? Chamus Javascript под браузер 3 12.05.2014 09:07
Зачем у NodeList и HTMLCollection свойство length enumerable? danik.js Общие вопросы Javascript 5 27.03.2013 11:02
Зачем нужна session_ destroy() ? jsuse Серверные языки и технологии 2 03.03.2012 08:19
jquery вопрос-зачем нужны некоторые фунции Matre jQuery 36 08.01.2011 06:25