Warum ist das Borg-Muster besser als das Singleton-Muster ?
Ich frage, weil ich nicht sehe, dass sie zu etwas anderem führen.
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()
Was ich hier anzeigen möchte, ist, dass das Serviceobjekt, ob als Borg oder Singleton implementiert, einen nicht trivialen internen Status hat (es bietet einen darauf basierenden Service) (ich meine, es muss etwas Nützliches sein, es ist kein Singleton / Borg nur für Spaß).
Und dieser Zustand muss eingeleitet werden. Hier ist die Singleton-Implementierung einfacher, da wir init als Aufbau des globalen Zustands behandeln. Ich finde es umständlich, dass das Borg-Objekt seinen internen Status abfragen muss, um zu sehen, ob es sich selbst aktualisieren soll.
Es wird schlimmer, je mehr innerer Zustand Sie haben. Wenn das Objekt beispielsweise das Teardown-Signal der Anwendung abhören muss, um sein Register auf der Festplatte zu speichern, sollte diese Registrierung ebenfalls nur einmal durchgeführt werden. Dies ist mit einem Singleton einfacher.