Skip to content

Instantly share code, notes, and snippets.

@DmitriiNazimov
Last active April 25, 2024 15:22
Show Gist options
  • Select an option

  • Save DmitriiNazimov/cd319f6d6acada7ea8b52d56c29921d2 to your computer and use it in GitHub Desktop.

Select an option

Save DmitriiNazimov/cd319f6d6acada7ea8b52d56c29921d2 to your computer and use it in GitHub Desktop.

Revisions

  1. DmitriiNazimov renamed this gist Aug 30, 2019. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. DmitriiNazimov revised this gist Aug 13, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion script.js
    Original file line number Diff line number Diff line change
    @@ -2,7 +2,7 @@
    *
    * ПАТТЕРН SINGLETON
    *
    * Паттерн Одиночка гарантирует, что класс имеет толь- ко один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.
    * Паттерн Одиночка гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.
    *
    */

  3. DmitriiNazimov revised this gist Aug 13, 2019. 1 changed file with 8 additions and 1 deletion.
    9 changes: 8 additions & 1 deletion script.js
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,11 @@
    Паттерн Одиночка гарантирует, что класс имеет толь- ко один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.
    /**
    *
    * ПАТТЕРН SINGLETON
    *
    * Паттерн Одиночка гарантирует, что класс имеет толь- ко один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.
    *
    */



    var privateMethod = Symbol(); // Чтобы создать приватный метод приходится такую ерунду писать. Ничего лучше пока не придумали.
  4. DmitriiNazimov revised this gist Aug 13, 2019. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions script.js
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,6 @@
    Паттерн Одиночка гарантирует, что класс имеет толь- ко один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.


    var privateMethod = Symbol(); // Чтобы создать приватный метод приходится такую ерунду писать. Ничего лучше пока не придумали.
    class Singleton {
    static #instance = null; // Объявляем статическое приватное свойство. # - значит приватное.
  5. DmitriiNazimov revised this gist Aug 11, 2019. No changes.
  6. DmitriiNazimov revised this gist Aug 11, 2019. No changes.
  7. DmitriiNazimov revised this gist Aug 9, 2019. No changes.
  8. DmitriiNazimov revised this gist Aug 9, 2019. No changes.
  9. DmitriiNazimov revised this gist Jul 12, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion script.js
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,4 @@
    var privateMethod = Symbol(); // Чтобы создать приватный метод приходится такую ерунду писать. Ничего улчше пока не придумали.
    var privateMethod = Symbol(); // Чтобы создать приватный метод приходится такую ерунду писать. Ничего лучше пока не придумали.
    class Singleton {
    static #instance = null; // Объявляем статическое приватное свойство. # - значит приватное.

  10. DmitriiNazimov revised this gist Jun 28, 2019. No changes.
  11. DmitriiNazimov revised this gist Jun 28, 2019. No changes.
  12. DmitriiNazimov revised this gist Jun 28, 2019. No changes.
  13. DmitriiNazimov revised this gist Jun 28, 2019. No changes.
  14. DmitriiNazimov renamed this gist Jun 28, 2019. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  15. DmitriiNazimov created this gist Jun 28, 2019.
    30 changes: 30 additions & 0 deletions Singleton JS + синтаксис ООП ES6
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,30 @@
    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);