Dlaczego wzór Borga jest lepszy niż wzór Singletona ?
Pytam, ponieważ nie widzę, aby skutkowały czymś innym.
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()
Singel:
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()
Chcę tutaj pokazać, że obiekt usługi, niezależnie od tego, czy jest zaimplementowany jako Borg czy Singleton, ma nietrywialny stan wewnętrzny (zapewnia pewną usługę na jego podstawie) (mam na myśli to, że musi to być coś użytecznego, a nie Singleton / Borg tylko dla zabawa).
I ten stan musi zostać zainicjowany. W tym przypadku implementacja Singletona jest prostsza, ponieważ traktujemy init jako konfigurację stanu globalnego. Uważam za niezręczne, że obiekt Borg musi sprawdzać swój stan wewnętrzny, aby sprawdzić, czy powinien się zaktualizować.
Staje się gorzej, im bardziej masz stan wewnętrzny. Na przykład, jeśli obiekt musi nasłuchiwać sygnału rozłączania Aplikacji, aby zapisać swój rejestr na dysku, ta rejestracja również powinna być wykonana tylko raz, a jest to łatwiejsze w przypadku Singletona.