Sobes.tech
Back to questions
Junior — Middle
48

Можете ли вы объяснить принцип работы паттерна Singleton и его особенности?

Companies where asked
adspector

Answer from AI

sobes.tech AI

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

Особенности:

  • Конструктор обычно делают приватным или защищённым, чтобы предотвратить создание новых экземпляров извне.
  • Экземпляр создаётся лениво (при первом обращении) или сразу при загрузке.
  • В многопоточной среде нужно обеспечить потокобезопасность создания экземпляра.

Пример на Python с использованием декоратора:

def singleton(cls):
    instances = {}
    def get_instance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return get_instance

@singleton
class Logger:
    def log(self, msg):
        print(msg)

logger1 = Logger()
logger2 = Logger()
print(logger1 is logger2)  # True

Здесь класс Logger будет иметь только один экземпляр.