【发布时间】:2010-11-22 01:11:18
【问题描述】:
为什么Borg pattern 比Singleton pattern 更好?
我问是因为我看不出它们有什么不同。
博格:
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/博格只是为了好玩)。
而且这个状态必须被初始化。这里的 Singleton 实现更直接,因为我们将 init 视为全局状态的设置。我觉得 Borg 对象必须查询其内部状态以查看它是否应该更新自己,这很尴尬。
你拥有的内在状态越多,情况就越糟糕。例如,如果对象必须侦听应用程序的拆卸信号才能将其寄存器保存到磁盘,则该注册也应该只进行一次,而这对于单例来说更容易。
【问题讨论】:
-
博格模式? ^_^ 我第一次听说它是c2.com/cgi/wiki?MonostatePattern
-
单态?我们是马泰利斯。我们说博格。
-
这里对 Borg 的一些赞美:code.activestate.com/recipes/66531