python 设计模式之单例模式
-
定义:
- 让类创建的对象,在系统中只有唯一的一个实例
-
应用场景:
- 资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如日志文件,应用配置。
- 控制资源的情况下,方便资源之间的互相通信。如线程池等。
- 网站的计数器
- 应用配置
- 多线程池
- 数据库配置,数据库连接池
- ‘应用程序日志应用
-
案例:
#!/usr/bin/python3 # -*- coding:utf-8 -*- # @Author : Charlie Zhang # @Email : charlie.zhang@wiwide.com # @Time : 2021/3/25 22:00 # @Version : 1.0 # @File : singleton.py # @Software : PyCharm class SingleTon: __instance = None # 记录单例对象 def __new__(cls, *args, **kwargs): if cls.__instance is None: # 判断单例对象是否存在 cls.__instance = super().__new__(cls) return cls.__instance # 返回单例对象 class Person(SingleTon): pass if __name__ == '__main__': p1 = Person() p2 = Person() print(id(p1)) print(id(p2)) 结果: 1880300246296 1880300246296
-
带参数的单例,参数一致时只创建一次。(利用字典key唯一的特点实现)
#!/usr/bin/python3 # -*- coding:utf-8 -*- # @Author : Charlie Zhang # @Email : charlie.zhang@wiwide.com # @Time : 2021/3/25 22:00 # @Version : 1.0 # @File : singleton.py # @Software : PyCharm class Person: _instance_ = {} def __new__(cls, name): if name not in cls._instance_: cls._instance_[name] = super().__new__(cls) return cls._instance_[name] def __init__(self, name): self.name = name if __name__ == '__main__': p1 = Person('杨过') p2 = Person('小龙女') p3 = Person('小龙女') print(id(p1)) print(id(p2)) print(id(p3)) 结果: 2419122689808 2419152504312 2419152504312