Warum ist das Borg-Muster besser als das Singleton-Muster in Python?

Warum ist derBorg-Muster besser als dieSingleton-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 Service-Objekt, ob als Borg oder Singleton implementiert, einen nicht-trivialen internen Status hat (es stellt einen darauf basierenden Service bereit) (ich meine, es muss etwas Nützliches sein, es ist kein Singleton / Borg nur für Spaß).

Und dieser Zustand muss herbeigeführt werden. Hier ist die Singleton-Implementierung einfacher, da wir behandelndrin als Aufbau des globalen Staates. 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 inneren Zustand Sie haben. Wenn das Objekt beispielsweise auf das Teardown-Signal der Anwendung hören muss, um sein Register auf der Festplatte zu speichern, sollte diese Registrierung ebenfalls nur einmal erfolgen. Dies ist mit einem Singleton einfacher.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage