设计模式——单例模式
参考链接:https://www.cnblogs.com/huchong/p/8244279.html
单例模式:
单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。例如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个名称为AppConfig的类来读取配置信息。程序运行期间,可能很多地方都需要使用配置文件的内容,很多地方就会创建AppConfig类的实例,这样就会导致系统中存在多个AppConfig类的实例,会严重浪费内存资源,因此,我们希望AppConfig这样的类在程序运行期间只存在一个实例。
实现单例模式的几种方式:
1.使用模块
Python的模块就是天然的单例模式。因为模块在第一次导入就会生成.pyc文件,当第二次导入时会直接加载.pyc文件,而不会再次执行模块代码,所以我们只需要把相关函数定义在一个模块中,就可以获得一个单例对象。
# mysingleton.py class Singleton: def foo(self): pass singleton = Singleton()
将上面的代码保存在文件mysingleton.py中,使用时直接在其它文件中导入此文件中对象,这个对象就是单例模式对象。
2.使用装饰器
def Singleton(cls): _instance = {} def _singleton(*args, **kargs): if cls not in _instance: _instance[cls] = cls(*args, **kargs) return _instance[cls] return _singleton @Singleton class A(object): a = 1 def __init__(self, x=0): self.x = x a1 = A(2) a2 = A(3)
3.使用类
4.基于__new__方法实现(推荐)
5.基于metaclass方式实现