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