Skip to content

Latest commit

 

History

History
45 lines (31 loc) · 1.51 KB

File metadata and controls

45 lines (31 loc) · 1.51 KB

Паттерн Одиночка

Паттерн Одиночка - порождающий

При паттерне одиночка (singleton) объект класса может быть создан лишь единожды, а далее класс просто игнорирует создание, вместо этого выдавая тот же самый объект (который был создан самый первый).

Существуют разные варианты реализации данного паттерна.

Здесь представлен самый популярный в Python - через декоратор (также через базовый класс, через метакласс).

Tip

Допустим, у нас может быть лишь один писатель.

При попытке создать второго ничего не получится,
нам просто вернет того же самого первого писателя.

def singleton(cls):
    instances = {}

    def getinstance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]

    return getinstance


@singleton
class Writer:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return self.name


writer1 = Writer("писатель1")
writer2 = Writer("писатель2")
print(writer1, writer2)

# output:
# писатель1 писатель1