Почему шаблон Borg лучше, чем шаблон Singleton?
Я спрашиваю, потому что я не вижу в них ничего другого.
Borg:
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()
Singleton:
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/Борг просто для удовольствия).
И это состояние должно быть приведено в действие. Здесь реализация Singleton является более простой, поскольку мы рассматриваем init как настройку глобального состояния. Мне неудобно, что объект Borg должен запросить свое внутреннее состояние, чтобы проверить, не следует ли его обновлять.
Это становится хуже, чем больше у вас внутреннего состояния. Например, если объект должен прослушивать сигнал Teardown приложения, чтобы сохранить его регистр на диске, эта регистрация также должна выполняться только один раз, и это проще с помощью Singleton.