上一篇文章中,我们讨论的是GOF编写的设计模式图书中的相关内容。GoF的单例设计模式是指,一个类有且只有一个对象。然而,根据Alex Martelli的说法,通常程序员需要的是让实例共享相同的状态。他建议开发人员更应关注状态和行为,而不是同一性。由于该概率基于所有对象共享相同的状态,因此被称为Monostate(单态)模式。
如下程序,我们将变量__shared_state赋给__dict__(python用__dict__存储一个类所有对象的状态),这样,这个类创建的所有实例都通过__shared_state共享状态。
class Borg:
__shared_state = {'1' : '2'}
def __init__(self):
self.x = 1
self.__dict__ = self.__shared_state
pass
if __name__ == '__main__':
b = Borg()
b1 =Borg()
b.x = 4
print('Borg Object "b": ', b) # b and b1 are distinct objects
print('Borg Object "b1": ', b1)
print('Object State "b": ', b.__dict__) # b and b1 share same state
print('Objcet State "b1": ', b1.__dict__)
另一种方式是通过重写__new__方法来实现,如下
class Borg(object):
__shared_state = {}
def __new__(cls, *args, **kargs):
obj = super(Borg, cls).__new__(cls, *args, **kargs)
obj.__dict__ = cls.__shared_state
return obj
def __init__(self):
self.x = 1
if __name__ == '__main__':
b = Borg()
b1 = Borg()
b.x = 4
print('Borg Object "b": ', b) # b and b1 are distinct objects
print('Borg Object "b1": ', b1)
print('Object State "b": ', b.__dict__) # b and b1 share same state
print('Objcet State "b1": ', b1.__dict__)