gpt4 book ai didi

python - 为什么 Borg 模式比 Python 中的 Singleton 模式更好

转载 作者:IT老高 更新时间:2023-10-28 21:33:36 27 4
gpt4 key购买 nike

为什么 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 对象必须查询其内部状态以查看它是否应该更新自己,这很尴尬。

你拥有的内在状态越多,情况就越糟糕。例如,如果对象必须监听应用程序的拆卸信号才能将其注册保存到磁盘,则该注册也应该只完成一次,而这对于单例来说更容易。

最佳答案

borg 与众不同的真正原因归结为子类化。

如果您将一个 borg 子类化,则子类的对象与其父类对象具有相同的状态,除非您明确覆盖该子类中的共享状态。单例模式的每个子类都有自己的状态,因此会产生不同的对象。

同样在单例模式中,对象实际上是相同的,而不仅仅是状态(即使状态是唯一真正重要的东西)。

关于python - 为什么 Borg 模式比 Python 中的 Singleton 模式更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1318406/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com