单例模式
- https://www.cnblogs.com/restartyang/articles/7770856.html
- 定义:保证一个类只有一个实例,并提供一个访问它的全局访问点
- 适用场景:
- 当一个类只有一个实例而客户可以从一个众所周知的访问点访问它时
- 频繁访问数据库或文件的对象。
- 需要频繁实例化然后销毁的对象。
- 创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
- 有状态的工具类对象。
- 频繁访问数据库或文件的对象。
- 经典使用场景:
- 资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置。
- 控制资源的情况下,方便资源之间的互相通信。如线程池等。
- 优点:对唯一实例的受控访问,相当于全局变量,但是又可以防止此变量被串改
class Baby(object):
__san=None #相当于一个空间名 (全局访问点)
def __new__(cls, *args, **kwargs):
if Baby.__san is None:
Baby.__san = super().__new__(cls)
return Baby.__san
def __init__(self,cloth,pants):
self.cloth=cloth
self.pants=pants
a=Baby('红毛衣','绿皮裤')
b=Baby('白衬衫','黑裤子')
print(a.cloth)
print(b.cloth)
# 白衬衫
#白衬衫