Зачем нужны синглтоны?
Я имею в виду в JS. Я прочитал чуток про них, пишут что это класс который имеет только один экземпляр. А зачем это нужно? Не проще ли сразу просто создать объект? А если нужна инкапсуляция, просто закрыть его в замыкании?
|
Ну во-первых, синглтон - шаблон для языков программирования в целом.
Не во всех же языках можно взять и создать объект с методами, как в js. Во-вторых, ты говоришь "сразу просто создать объект". Но в примерах синглтонов, наоборот, применяют отложенную инициализацию.. |
Цитата:
|
Например, чтобы отложить инициализацию..
|
Цитата:
|
|
Цитата:
При этом мы не расходуем ресурсы на его создание на каждом хите. А только если наступило то событие когда он действительно нужен. При этом нам не надо везде по коду проверять существует он или нет - просто используем метод предназначенный для получения ссылки. |
У тя есть 100500 виджетов, каждый хочет общаться с БД, но прямой доступ мы ему не даём, поэтому он общается со специальный драйвером, но если каждый виджет начнёт создавать 100500 драйверов, то это будет не эффективно, а с другой стороны если виджет начнёт много знать и структуре приложения и как то проверять создание экземпляра драйвера, то это будет плохо с точки зрения архитектуры, поэтому удобно юзать синглтоны: виджет "как будто" создаёт свой экземпляр, но на деле всё сводится к одному единственному.
|
Влезу.
Цитата:
Как пишут на русской википедии - невозможно задать порядок инициализации. Так вот если вы замечаете такие симптомы, то скорее всего у вас логика нарушена. Если с логикой все более-менее, то порядок инициализации on-demand никого не колебет. Это не десктоп, это серверные-клиентские скрипты - пронесся и умер. Чем быстрее тем лучше. |
Самым типичным синглетоном является линк к драйверу БД. Не будете же коннектиться в каждой функции. Ну вот, делается линк и втыкается в такую волшебную проперть под геттером - если она есть - выдается, если нет - подключается класс, делается инстансь, коннект, сохраняется, выполняется, возвращается - теперь только юзай.
В результате можно заранее понатыкать х знает сколько и ничем не пользоваться если не надо. У меня со старых проектов заезжают такие тычки в новые и торчат никому не мешая, пока не вызовешь и не обломишься без соответствующего класса. Паттерн сиглетона - мутант между статикой и динамикой, можно считать кешированием. |
Часовой пояс GMT +3, время: 01:03. |