Создание экземпляра класса для вызова методов stati c - PullRequest
0 голосов
/ 22 апреля 2020

Недавно я наткнулся на некоторый код, который выглядит примерно так:

class MyClass {
  private static instance: MyClass;
  private myString: string;

  public static Instance(myString) {
    if (!this.instance) {
      this.instance = new this(myString);
    }
    return this.instance;
  }
  private constructor(myString: string) {
    this.myString = myString;
  }
  public getMyString() {
    console.log(this.myString);
  }
}

Мой вопрос: зачем нужно что-то подобное делать? Зачем человеку создавать такой экземпляр, вместо того, чтобы создавать экземпляр класса «обычным способом».

Какая польза от таких вещей?

1 Ответ

1 голос
/ 22 апреля 2020

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

Что касается конкретной реализации, я бы предложил несколько исправлений:

  • this.instance в методе stati c должно быть MyClass.instance вместо
  • в следующем вызове new this(myString), myString будет undefined, так как на переменные не * stati c нельзя ссылаться из контекста stati c
  • нет способа установить myString
  • public static Instance { ... } вместо этого следует использовать метод c: public static instance() { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...