Pourquoi le Modèle Borg mieux que le Modèle singleton ?
Je pose la question parce que je ne vois pas comment ils pourraient aboutir à quelque chose de différent.
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()
Ce que je veux montrer ici, c'est que l'objet service, qu'il soit implémenté en tant que Borg ou Singleton, a un état interne non trivial (il fournit un service basé sur celui-ci) (je veux dire que cela doit être quelque chose d'utile, ce n'est pas un Singleton/Borg juste pour le fun).
Et cet état doit être initié. Ici, l'implémentation de Singleton est plus simple, puisque nous traitons init comme la mise en place de l'état global. Je trouve gênant que l'objet Borg doive interroger son état interne pour savoir s'il doit se mettre à jour.
Plus l'état interne est important, plus la situation s'aggrave. Par exemple, si l'objet doit écouter le signal de démontage de l'application pour enregistrer son registre sur le disque, cet enregistrement ne doit être effectué qu'une seule fois, ce qui est plus facile avec un Singleton.