Почему шаблон Борг лучше, чем шаблон 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 должен запросить свое внутреннее состояние, чтобы увидеть, должен ли он обновляться сам.
Становится хуже, чем больше у вас внутреннего состояния. Например, если объект должен прослушивать сигнал разрыва Приложения, чтобы сохранить свой регистр на диск, эту регистрацию также следует выполнить только один раз, а с Singleton это проще.