¿Por qué el patrón Borg es mejor que el patrón Singleton ?
Pregunto porque no veo que resulten en nada diferente.
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()
Único:
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()
Lo que quiero mostrar aquí es que el objeto de servicio, ya sea implementado como Borg o Singleton, tiene un estado interno no trivial (proporciona algún servicio basado en él) (quiero decir que tiene que ser algo útil, no es un Singleton / Borg solo para divertido).
Y este estado debe iniciarse. Aquí, la implementación de Singleton es más sencilla, ya que tratamos a init como la configuración del estado global. Me resulta extraño que el objeto Borg tenga que consultar su estado interno para ver si debería actualizarse.
Se vuelve peor cuanto más estado interno tienes. Por ejemplo, si el objeto tiene que escuchar la señal de eliminación de la aplicación para guardar su registro en el disco, ese registro solo debe hacerse una vez también, y esto es más fácil con un Singleton.