Last active
April 25, 2024 15:22
-
-
Save DmitriiNazimov/cd319f6d6acada7ea8b52d56c29921d2 to your computer and use it in GitHub Desktop.
[JS Паттерн ОДИНОЧКА SINGLETON + синтаксис ООП ES6] #js #ООП #ES6 #Инкапсуляция #Паттерны
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* ПАТТЕРН SINGLETON | |
* | |
* Паттерн Одиночка гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру. | |
* | |
*/ | |
var privateMethod = Symbol(); // Чтобы создать приватный метод приходится такую ерунду писать. Ничего лучше пока не придумали. | |
class Singleton { | |
static #instance = null; // Объявляем статическое приватное свойство. # - значит приватное. | |
constructor(num) { | |
if (Singleton.#instance) { // проверяем что значение #instance не равно null (т.е. уже что-то присвоено), и прерываем инструкцию, чтобы в соответствии с принципом синглтон сохранить значения присвоенные при первой инициации. | |
return Singleton.#instance; | |
} | |
this.state = "justtext"; | |
Singleton.#instance = this; | |
this.publicMethod(num); // автовызов публичного метода в конструкторе. Можно не вызывать в конструкторе, а только вручную | |
this[privateMethod]() // call private | |
} | |
publicMethod(num='default string ') { // Публичный метод с примером дефолтного значения аргумента. | |
console.log('publicMethod: ' + num + this.state); | |
} | |
[privateMethod]() { // Приватный метод, т.е. его нельзя вызывать вне класса. | |
console.log('privateMethod:' + this.state + this.state); | |
} | |
} | |
let first = new Singleton('first'); | |
Singleton.instance = 0; // Попытка внести изменения в приватное свойство не сработает, оно инкапсулировано. | |
let second = new Singleton('second'); | |
second.privateMethod(); // Попытка вызвать приватный метод не сработает. | |
let third = new Singleton('3'); | |
console.log(first === third); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment