Borg模式(也称为Monostate模式)是Python中实现单例模式的一种替代方案。与传统的单例模式不同,Borg模式允许多个实例存在,但这些实例共享相同的状态。
Borg模式通过以下方式工作:
__shared_state
__dict__
都指向这个共享的__shared_state
class Borg:
__shared_state = {}
def __init__(self):
self.__dict__ = self.__shared_state
# 其他初始化代码
# 使用示例
b1 = Borg()
b1.x = 10
b2 = Borg()
print(b2.x) # 输出: 10
b2.x = 20
print(b1.x) # 输出: 20
原因:子类没有正确继承__shared_state
解决方案:
class ChildBorg(Borg):
__shared_state = {}
def __init__(self):
Borg.__init__(self)
# 子类特定初始化
原因:虽然基本操作是线程安全的,但复杂操作可能不是
解决方案:使用锁保护共享状态
import threading
class ThreadSafeBorg(Borg):
_lock = threading.Lock()
def safe_update(self, key, value):
with self._lock:
setattr(self, key, value)
原因:每个实例都会执行__init__
解决方案:使用标志位控制初始化
class InitOnceBorg(Borg):
def __init__(self):
if not hasattr(self, '_initialized'):
# 初始化代码
self._initialized = True
class NamespacedBorg:
_namespaces = {}
def __init__(self, namespace='default'):
self._namespace = namespace
if namespace not in self._namespaces:
self._namespaces[namespace] = {}
self.__dict__ = self._namespaces[namespace]
Borg模式提供了一种灵活的方式来管理共享状态,特别适合Python中的许多应用场景。