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

发布于 2021-01-29 16:25:06

为什么Borg模式Singleton模式更好?

我问是因为我看不到它们会导致任何不同。

博格:

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
视为全局状态的设置。我发现Borg对象必须查询其内部状态以查看是否应该自我更新很尴尬。

内部状态越多,情况就越糟。例如,如果对象必须侦听应用程序的拆除信号以将其寄存器保存到磁盘,则该注册也应仅执行一次,并且使用Singleton会更容易。

关注者
0
被浏览
182
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

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

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看