10.1. Singleton¶
10.1.1. Rationale¶
EN: Singleton
PL: Singleton
Type: object
10.1.2. Use Cases¶
Database connection pool
HTTP Gateway
10.1.3. Design¶
10.1.4. Implementation¶
class Singleton:
__instance = None
@classmethod
def get_instance(cls):
if not cls.__instance:
cls.__instance = ...
return cls.__instance
# Creating first instance for the first time
first = Singleton.get_instance()
# Connecting for the second time
# Will use existing instance
second = Singleton.get_instance()
class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super().__new__(*args, **kwargs)
obj = cls._instance
obj.__init__()
return obj
class MyClass(Singleton):
pass
class DB:
__connection = None
@classmethod
def connect(cls):
if not cls.__connection:
print('Establishing connection...')
cls.__connection = ...
return cls.__connection
# Connecting for the first time
# Will establish new connection
first = DB.connect()
# Connecting for the second time
# Will use existing connection to the DB
# The same handle as `first`
second = DB.connect()
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super().__call__(*args, **kwargs)
return cls._instances[cls]
class MyClass(metaclass=Singleton):
pass
10.1.5. Assignments¶
Todo
Create assignments