Чому шаблон Борга кращий за шаблон Сінглтона ?
Я запитую, бо я не бачу, щоб вони спричинили щось інше.
Борг:
class Borg:
__shared_state = {}
# init internal state variables here
__register = {}
def __init__(self):
self.__dict__ = self.__shared_state
if not self.__register:
self._init_default_register()
Сінглтон:
class Singleton:
def __init__(self):
# init internal state variables here
self.__register = {}
self._init_default_register()
# singleton mechanics external to class, for example this in the module
Singleton = Singleton()
Тут я хочу показати, що об’єкт служби, незалежно від того, реалізований він як Borg чи Singleton, має нетривіальний внутрішній стан (він надає певну послугу на його основі) (я маю на увазі, що це має бути щось корисне, це не Singleton / Borg лише для веселощі).
І цю державу треба запровадити. Тут реалізація Сінглтона є більш простою, оскільки ми розглядаємо init як установку глобальної держави. Мені незручно, що об'єкт Borg повинен запитувати свій внутрішній стан, щоб перевірити, чи слід йому оновлюватись.
Що гірше, чим більше у вас внутрішнього стану. Наприклад, якщо об'єкт повинен прослухати сигнал відключення Програми, щоб зберегти свій регістр на диск, ця реєстрація повинна бути зроблена також лише один раз, і це простіше за допомогою Singleton.