我这么问是因为我不认为他们会有什么不同。
博格:
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()
辛格尔顿:
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()
我想在这里展示的是服务对象,无论是实现为 Borg 还是 Singleton,都有一个不平凡的内部状态(它提供了一些基于它的服务)(我的意思是它必须是有用的,而不是为了好玩而使用 Singleton/Borg)。
这个国家必须被启动。这里的 Singleton 实现更加简单,因为我们将 Init视为全局状态的设置。我觉得这很尴尬,博格对象必须查询其内部状态,看看是否应该更新自己。
你的内在状态越严重,情况就越糟。例如,如果对象必须听应用程序的拆卸信号才能将它的寄存器保存到磁盘,那么注册也只应该执行一次,而使用 Singleton 会更容易。