Как мутировать поля Singleton-Класса?

Singleton-класс представляет собой класс, для которого гарантировано создается только один экземпляр. Такой подход широко используется в различных сценариях, где требуется общий доступ к ресурсам или настройкам одного объекта из разных частей программы.

В TypeScript можно реализовать Singleton-класс следующим образом:

class Singleton {
  private static instance: Singleton;
  private data: string;

  private constructor() {
    this.data = "Initial data";
  }

  public static getInstance(): Singleton {
    if (!Singleton.instance) {
      Singleton.instance = new Singleton();
    }

    return Singleton.instance;
  }

  public getData(): string {
    return this.data;
  }

  public setData(newData: string): void {
    this.data = newData;
  }
}

В этом примере класс Singleton имеет приватное статическое поле instance, которое будет хранить ссылку на единственный экземпляр класса. Конструктор класса объявлен как приватный, чтобы предотвратить создание экземпляров класса извне. Метод getInstance() отвечает за создание и возвращение экземпляра класса, проверяя, был ли уже создан экземпляр. Если экземпляр уже существует, метод просто возвращает сохраненный экземпляр, в противном случае создает новый экземпляр и сохраняет его в статическом поле.

Чтобы мутировать поля Singleton-класса, вы можете использовать публичные методы класса. В представленном примере у класса Singleton есть методы getData() и setData(), которые позволяют получать и устанавливать значение приватного поля data. Вызов метода setData() изменит значение поля data:

const singleton = Singleton.getInstance();
console.log(singleton.getData()); // Выводит "Initial data"

singleton.setData("New data");
console.log(singleton.getData()); // Выводит "New data"

Метод getData() возвращает текущее значение поля data, а метод setData() принимает новое значение и присваивает его полю data. Вы можете вызвать метод setData() из любой части программы, чтобы изменить значение поля data. После изменения значения метод getData() будет возвращать новое значение.

Важно отметить, что Singleton-класс может использоваться в разных частях программы, и все они будут использовать один и тот же экземпляр класса. Это означает, что любые изменения, внесенные в поля экземпляра в одной части программы, будут отражаться и в других частях программы, которые используют этот экземпляр.

Однако, имейте в виду, что использование глобальных изменяемых данных, особенно с использованием Singleton-классов, может привести к созданию сильной связности между различными частями программы и затруднить поддержку и отладку кода. Поэтому, перед использованием Singleton-класса для хранения глобальных данных, необходимо внимательно оценить преимущества и недостатки такого подхода.