@Scrazy
2017-04-11T07:02:45.000000Z
字数 1330
阅读 1051
python 设计模式
单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。
class Singleton(object):def __new__(cls):if not hasattr(cls, '_instance'):orig = super(Singleton,cls)cls._instance = orig.__new__(cls)return cls._instance打开 Ipython 测试一下In [859]: class Singleton(object):...: def __new__(cls):...: if not hasattr(cls, '_instance'):...: orig = super(Singleton,cls)...: cls._instance = orig.__new__(cls)...: return cls._instance...:In [860]: s1 = Singleton()In [861]: s2 = Singleton()In [862]: s1Out[862]: <__main__.Singleton at 0x7f8c401650b8>In [863]: s2Out[863]: <__main__.Singleton at 0x7f8c401650b8>In [864]: s1 is s2Out[864]: True
def singleton(cls, *args, **kwds):instance = {}def get_instance():if not cls in instance:instance[cls] = cls(*args, **kwds)return instance[cls]return get_instance测试下:In [845]: def singleton(cls, *args, **kwds):...: instance = {}...: def get_instance():...: if not cls in instance:...: instance[cls] = cls(*args, **kwds)...: return instance[cls]...: return get_instance...:In [846]: @singleton...: class Example(object):...: a = 1...:In [847]: ex1 = Example()In [848]: ex2 = Example()In [849]: ex1Out[849]: <__main__.Example at 0x7f8c4015ca90>In [850]: ex2Out[850]: <__main__.Example at 0x7f8c4015ca90>In [851]: ex1.aOut[851]: 1In [852]: ex2.aOut[852]: 1