Одиночка (Singleton) :: Cетевой уголок Majestio

Одиночка (Singleton)


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

Применимость

Подробнее на 👉 refactoring.guru

UML-диаграмма

Пример реализации

Будет создан объект-одиночка путем построения его из статического метода getInstance(). Других способов построения нет, т.к. конструктор должен объявляться приватным, и он извне не доступен.

#include <iostream>

class Singleton {
 private:
  static Singleton* instance;
  Singleton() {}

 public:
  static Singleton* getInstance() {
    if (instance == nullptr)
      instance = new Singleton();
    return instance;
  }
  
  void showMessage() { std::cout << "Hello, I am a Singleton!" << std::endl; }
};

Singleton* Singleton::instance = nullptr;

int main() {
  Singleton* singleton = Singleton::getInstance();
  singleton->showMessage();

  return 0;
}
Будет напечатано:
Hello, I am a Singleton!
class Singleton {
  static Singleton? _instance;

  Singleton._();

  static Singleton getInstance() {
    if (_instance == null) {
      _instance = Singleton._();
    }
    return _instance!;
  }

  void showMessage() {
    print('Hello, I am a Singleton!');
  }
}

void main() {
  Singleton singleton = Singleton.getInstance();
  singleton.showMessage();
}
Будет напечатано:
Hello, I am a Singleton!
Рейтинг: 0/5 - 0 голосов