python设计模式之Borg模式

来源:互联网 发布:2015各省医药行业数据 编辑:程序博客网 时间:2024/05/17 03:37

Borg模式

activestate上面有篇文章Singleton? We don’t need no stinkin’ singleton: the Borg design pattern, 告诉我们Borg模式要比单例模式要好。 为什么这样说:单例模式生成的单例一旦生成就一直存在,但是Borg确实和源共享的能修改

python的例子

class Config(object):    _we_are_one = {}    _myvalue = ""    def __new__(cls, *p, **k):        self = object.__new__(cls, *p, **k)        self.__dict__ = cls._we_are_one        return self    def myvalue(self, value=None):        if value:        self._myvalue = value        return self._myvalueif __name__ == '__main__':    conf = Config()    conf.myvalue("Hello")    conf2 = Config()    print conf2.myvalue()

不要惊讶,其实是因为在修改myvalue的时候不仅修改了conf.dict还修改了Config._we_are_one,所以…

然后还有个装饰器版本:

def borg(cls):    cls._state = {}    orig_init = cls.__init__    def new_init(self, *args, **kwargs):        self.__dict__ = cls._state        orig_init(self, *args, **kwargs)    cls.__init__ = new_init    return cls@borgclass TestBorg(object):    def say_borg(self):        print "i am borg"
0 0