ключевое: "синглтон нужен в тех языках, в которых нет возможности создать объект без класса" Спасибо!
@anatolykobzisty98275 жыл бұрын
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-fm1sq3 жыл бұрын
Спасибо!
@bubblesort6368 Жыл бұрын
Может я что-то упусти, но почему не рассмотрен вариант создания синлтона через нативные js модули? module.exports = new Something();
@TimurShemsedinov Жыл бұрын
Это в другой лекции, по модулям, но вообще, нужно было сказать, конечно
@khisamovelnar56403 жыл бұрын
По поводу последнего пункта (синглтон в js не нужен), есть некоторые сомнения: 1. Если нужно создать немодифицируемый объект в единственном экземпляре. 2. Если нужно создать большой объект который будет инциализироваться только по необходимости, дабы не занимать место.
@TimurShemsedinov3 жыл бұрын
Для защиты от модификации синглтон не помогает, это deep freeze рекурсивный через Object.freeze нужно делать. Более того, единственность достигается проще тем же export/require и import/export, ведь синглтон нужно экспортировать или делать глобальным все равно
@khisamovelnar56403 жыл бұрын
А если свойства объекта спрятать замыканием выставив только геттеры, в классах можно приватные поля использовать? ``` 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) ```
@nikolai41003 жыл бұрын
Здравствуйте! Подскажите пожалуйста, планируются ли лекции по остальным паттернам ооп?
@TimurShemsedinov3 жыл бұрын
Да, в следующем учебном году
@nikolai41003 жыл бұрын
@@TimurShemsedinov Спасибо!
@malkevych4 жыл бұрын
Дякую за лекції, ціную вашу роботу! Скажіть будь ласка, наскільки взагалі доцільно використовувати сінглтони? Не раз зустрічав його в розділах антипатернів. Деяке уявлення про це є, але все ж, якщо ви можете щось від себе додати, можливо на прикладі використання у ваших застосунках. Дякую!
@TimurShemsedinov4 жыл бұрын
В чисто ооп-шных языках бывает, что без него нельзя, а к антипаттернам его можно отнести пртмерно так же, как и статический класс (без инстансов и с одними только статисескими методами). Но в js нет смысла в нем, потому, что есть объекты первого класса (для них не нужно создавать классы) и есть механизм импорта/экспорта и require в ноде, которые импортируют в любое место кода однажды созданный объект, практически они и реализуют паттерн.
@TimurShemsedinov4 жыл бұрын
Ну а где это бывает нужно: игры (это частный случай мультитона), для построения неймспейсов, для эмуляции глобального контекста для хоанения глобального состляния (это единственный слусай, когда синглтон действительно можно считать антипаттерном).
@malkevych4 жыл бұрын
@@TimurShemsedinov дякую!
@vladyslavholovko3253 жыл бұрын
1:29 Як це нічого не повертається? Я можу зробити return []; і масив чудово повернеться після new foo().
@TimurShemsedinov3 жыл бұрын
По-умолчанию возвращается this, я говорю, сто писать return this нет смысла, он и так возвратится
@dmitriivasilev77312 жыл бұрын
зачем лезть в темы, в которых не разбираешься? вы первый раз увидели все эти примеры ?)
@staspopadynets1941 Жыл бұрын
Человек по полочкам разложил каждый пример. С чего вы взяли что первый раз видит