14.10.2014, 13:50
|
Кандидат Javascript-наук
|
|
Регистрация: 14.10.2014
Сообщений: 117
|
|
Зачем нужны синглтоны?
Я имею в виду в JS. Я прочитал чуток про них, пишут что это класс который имеет только один экземпляр. А зачем это нужно? Не проще ли сразу просто создать объект? А если нужна инкапсуляция, просто закрыть его в замыкании?
|
|
14.10.2014, 14:09
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Ну во-первых, синглтон - шаблон для языков программирования в целом.
Не во всех же языках можно взять и создать объект с методами, как в js.
Во-вторых, ты говоришь "сразу просто создать объект". Но в примерах синглтонов, наоборот, применяют отложенную инициализацию..
__________________
В личку только с интересными предложениями
|
|
14.10.2014, 14:16
|
Кандидат Javascript-наук
|
|
Регистрация: 14.10.2014
Сообщений: 117
|
|
Сообщение от danik.js
|
Но в примерах синглтонов, наоборот, применяют отложенную инициализацию..
|
А зачем она нужна? Например?
|
|
14.10.2014, 14:20
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Например, чтобы отложить инициализацию..
__________________
В личку только с интересными предложениями
|
|
14.10.2014, 14:21
|
Кандидат Javascript-наук
|
|
Регистрация: 14.10.2014
Сообщений: 117
|
|
Сообщение от danik.js
|
отложить инициализацию
|
Не, ты же говоришь об отложенной инициализации самого синглтона? Я про это.
|
|
14.10.2014, 14:24
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
__________________
В личку только с интересными предложениями
|
|
14.10.2014, 14:54
|
Аспирант
|
|
Регистрация: 03.10.2014
Сообщений: 67
|
|
Сообщение от terminator-101
|
А зачем она нужна? Например?
|
На JS пока ни разу не понадобилось. А так. А зачем создавать объект если он не нужен.... Вот и создается при первом обращении. При этом само описание класса гарантирует, что будет существовать только один объект. Скрываются конструкторы (включая копирование).
При этом мы не расходуем ресурсы на его создание на каждом хите. А только если наступило то событие когда он действительно нужен. При этом нам не надо везде по коду проверять существует он или нет - просто используем метод предназначенный для получения ссылки.
|
|
14.10.2014, 16:13
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
У тя есть 100500 виджетов, каждый хочет общаться с БД, но прямой доступ мы ему не даём, поэтому он общается со специальный драйвером, но если каждый виджет начнёт создавать 100500 драйверов, то это будет не эффективно, а с другой стороны если виджет начнёт много знать и структуре приложения и как то проверять создание экземпляра драйвера, то это будет плохо с точки зрения архитектуры, поэтому удобно юзать синглтоны: виджет "как будто" создаёт свой экземпляр, но на деле всё сводится к одному единственному.
|
|
14.10.2014, 20:47
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Влезу.
Сообщение от terminator-101
|
Не, ты же говоришь об отложенной инициализации самого синглтона? Я про это.
|
синглетона не существует, есть метод который выполняется один раз и в дальнейшем просто выдает результат - единственную и неповторимую проперть или инстансь.
Как пишут на русской википедии - невозможно задать порядок инициализации. Так вот если вы замечаете такие симптомы, то скорее всего у вас логика нарушена. Если с логикой все более-менее, то порядок инициализации on-demand никого не колебет.
Это не десктоп, это серверные-клиентские скрипты - пронесся и умер. Чем быстрее тем лучше.
|
|
14.10.2014, 20:52
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Самым типичным синглетоном является линк к драйверу БД. Не будете же коннектиться в каждой функции. Ну вот, делается линк и втыкается в такую волшебную проперть под геттером - если она есть - выдается, если нет - подключается класс, делается инстансь, коннект, сохраняется, выполняется, возвращается - теперь только юзай.
В результате можно заранее понатыкать х знает сколько и ничем не пользоваться если не надо. У меня со старых проектов заезжают такие тычки в новые и торчат никому не мешая, пока не вызовешь и не обломишься без соответствующего класса.
Паттерн сиглетона - мутант между статикой и динамикой, можно считать кешированием.
Последний раз редактировалось kostyanet, 14.10.2014 в 20:56.
|
|
|
|