Шаблон Singleton (синглтон) в JavaScript

  Рет қаралды 9,020

Timur Shemsedinov

Timur Shemsedinov

Күн бұрын

Пікірлер: 20
@timashoff
@timashoff Жыл бұрын
ключевое: "синглтон нужен в тех языках, в которых нет возможности создать объект без класса" Спасибо!
@anatolykobzisty9827
@anatolykobzisty9827 5 жыл бұрын
00:00:00 Singleton через конструктор прототипа 00:03:27 Singleton через замыкания 00:06:10 Пример singleton через замыкания 00:08:15 Пример singleton через замыкания в функциональном стиле 00:09:23 Пример singleton через замыкания в функциональном стиле (упрощенный) 00:10:32 Создание singleton в JS
@Antonio-fm1sq
@Antonio-fm1sq 3 жыл бұрын
Спасибо!
@bubblesort6368
@bubblesort6368 Жыл бұрын
Может я что-то упусти, но почему не рассмотрен вариант создания синлтона через нативные js модули? module.exports = new Something();
@TimurShemsedinov
@TimurShemsedinov Жыл бұрын
Это в другой лекции, по модулям, но вообще, нужно было сказать, конечно
@khisamovelnar5640
@khisamovelnar5640 3 жыл бұрын
По поводу последнего пункта (синглтон в js не нужен), есть некоторые сомнения: 1. Если нужно создать немодифицируемый объект в единственном экземпляре. 2. Если нужно создать большой объект который будет инциализироваться только по необходимости, дабы не занимать место.
@TimurShemsedinov
@TimurShemsedinov 3 жыл бұрын
Для защиты от модификации синглтон не помогает, это deep freeze рекурсивный через Object.freeze нужно делать. Более того, единственность достигается проще тем же export/require и import/export, ведь синглтон нужно экспортировать или делать глобальным все равно
@khisamovelnar5640
@khisamovelnar5640 3 жыл бұрын
А если свойства объекта спрятать замыканием выставив только геттеры, в классах можно приватные поля использовать? ``` function Singleton(name){ const instance = Singleton.instance; if (instance) return instance; this.getName = () => name; Singleton.instance = this; } const test = new Singleton('test') console.log(test.getName()) const test2 = new Singleton('test22') console.log(test2.getName()) class ClassSingle { static #singleton #name; get name(){ return this.#name } constructor(name){ this.#name = name; } static getSingle(name){ if (ClassSingle.#singleton) return ClassSingle.#singleton ClassSingle.#singleton = new ClassSingle(name) return ClassSingle.#singleton; } } const testClassA = ClassSingle.getSingle('aa') const testClassB = ClassSingle.getSingle('бб') console.log(testClassA.name) console.log(testClassB.name) ```
@nikolai4100
@nikolai4100 3 жыл бұрын
Здравствуйте! Подскажите пожалуйста, планируются ли лекции по остальным паттернам ооп?
@TimurShemsedinov
@TimurShemsedinov 3 жыл бұрын
Да, в следующем учебном году
@nikolai4100
@nikolai4100 3 жыл бұрын
@@TimurShemsedinov Спасибо!
@malkevych
@malkevych 4 жыл бұрын
Дякую за лекції, ціную вашу роботу! Скажіть будь ласка, наскільки взагалі доцільно використовувати сінглтони? Не раз зустрічав його в розділах антипатернів. Деяке уявлення про це є, але все ж, якщо ви можете щось від себе додати, можливо на прикладі використання у ваших застосунках. Дякую!
@TimurShemsedinov
@TimurShemsedinov 4 жыл бұрын
В чисто ооп-шных языках бывает, что без него нельзя, а к антипаттернам его можно отнести пртмерно так же, как и статический класс (без инстансов и с одними только статисескими методами). Но в js нет смысла в нем, потому, что есть объекты первого класса (для них не нужно создавать классы) и есть механизм импорта/экспорта и require в ноде, которые импортируют в любое место кода однажды созданный объект, практически они и реализуют паттерн.
@TimurShemsedinov
@TimurShemsedinov 4 жыл бұрын
Ну а где это бывает нужно: игры (это частный случай мультитона), для построения неймспейсов, для эмуляции глобального контекста для хоанения глобального состляния (это единственный слусай, когда синглтон действительно можно считать антипаттерном).
@malkevych
@malkevych 4 жыл бұрын
@@TimurShemsedinov дякую!
@vladyslavholovko325
@vladyslavholovko325 3 жыл бұрын
1:29 Як це нічого не повертається? Я можу зробити return []; і масив чудово повернеться після new foo().
@TimurShemsedinov
@TimurShemsedinov 3 жыл бұрын
По-умолчанию возвращается this, я говорю, сто писать return this нет смысла, он и так возвратится
@dmitriivasilev7731
@dmitriivasilev7731 2 жыл бұрын
зачем лезть в темы, в которых не разбираешься? вы первый раз увидели все эти примеры ?)
@staspopadynets1941
@staspopadynets1941 Жыл бұрын
Человек по полочкам разложил каждый пример. С чего вы взяли что первый раз видит
@TimurSevimli
@TimurSevimli Жыл бұрын
Спасибо!
Асинхронные коллекторы данных
26:28
Timur Shemsedinov
Рет қаралды 4,2 М.
What type of pedestrian are you?😄 #tiktok #elsarca
00:28
Elsa Arca
Рет қаралды 34 МЛН
Long Nails 💅🏻 #shorts
00:50
Mr DegrEE
Рет қаралды 16 МЛН
Кто круче, как думаешь?
00:44
МЯТНАЯ ФАНТА
Рет қаралды 6 МЛН
Типизированные массивы в JavaScript
39:43
Timur Shemsedinov
Рет қаралды 9 М.
G.R.A.S.P | шаблоны проектирования
12:09
Фасад - петтерн для скрытия сложности
55:03
Timur Shemsedinov
Рет қаралды 4,4 М.
Программисты-самоучки... Слушайте внимательно.
22:45
Евгений Афанасьев
Рет қаралды 131 М.