- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
为什么 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/
我正在使用相互包含模块的 Borg 模式。请参阅下面的示例代码(不是真实代码,但它显示了问题)。在这种情况下,我有两个不同的 Borgs,因为解释器认为类名(我猜是类)是不同的。 有没有办法在这种情况
我正在考虑在我的项目中使用单例模式,所以我搜索了 StackOverflow 以找到一种 pythonic 方式来实现它。我找到了 this question公认的答案是“具有函数(而不是类)的模块可
我遇到了 Borg design并认为它很适合我正在做的事情,但是我在使用它时收到了 DeprecationWarning(我目前使用的是 Python 2.6,但很快就会转移到更新的版本)。 在评论
我正在使用 borg 模式在对象之间共享状态: class Borg: __shared_state = {} def __init__(self): self.__d
我知道使用此模式是为了创建具有相同状态的多个实例,但我真的不明白它是如何工作的。 class Borg: _shared_state = {} def __init__(self):
我刚刚在网上偶然发现了这些有趣的代码: http://code.activestate.com/recipes/66531/ class Borg: __shared_state = {}
我看到了这个 Borg 单例模式代码,但我无法理解我添加到单例对象的新成员是如何附加到 __shared_state = {} 字典的。 这是单例代码 class Borg(object):
我在单例中使用 QTimer 实现了一个计时器。单例是使用 Borg 实现的图案。如果我在 Singleton 的函数内使用单次启动 QTimer,它将不会被执行。在单例之外的函数中进行相同的调用效果
我正在使用来自不同网站的 API,该 API 会返回我的用户用来购买虚拟商品的几个“价格点 URL”。 我应该将这些结果缓存至少一个小时,因为它们不会对系统上的价格点进行太多更改。 (而且我们想节省我
为什么 Borg pattern优于Singleton pattern ? 我问是因为我看不出它们有什么不同。 博格: class Borg: __shared_state = {} # in
据我所知,Google 的 Kubernetes 是基于 Google 的 Borg;然而,Borg 似乎比 Kubernetes 更大。我的理解是,Borg 是一个大系统,包含像 Kubernete
我是一名优秀的程序员,十分优秀!