单例模式的意思
单例模式是一个软件的设计模式,为了保证一个类,无论调用多少次产生的实例对象,都是指
向同一个内存地址,仅仅只有一个实例(只有一个对象)。
单例模式的优势
1.全局只有一个接入点,可以更好地进行数据同步控制,避免多重占用;
2.由于单例模式要求在全局内只有一个实例,因而可以节省比较多的内存空间;
3.单例可长驻内存,减少系统开销。
单例模式的多种实现方式
基于类方式
class C1:
__instance = None
def __init__(self,name,age):
self.name = name
self.age = age
@classmethod
def singleton(cls):
if not cls.__instance:
cls.__instance = cls('moon',18)
return cls.__instance
ojb = C1.singleton()
ojb1 = C1.singleton()
ojb2 = C1('MOON',18)
基于元类
class Mymeta(type):
def __init__(self,name,bases,dic):
self.__instance = object.__new__(self)
self.__init__(self.__instance,'jason',18)
super().__init__(name,bases,dic)
def __call__(self, *args, **kwargs):
if args or kwargs:
obj = object.__new__(self)
self.__init__(obj,*args,**kwargs)
return obj
return self.__instance
class Mysql(metaclass=Mymeta):
def __init__(self, name, age):
self.name = name
self.age = age
obj1 = Mysql()
obj2 = Mysql()
print(id(obj1), id(obj2))
obj3 = Mysql('tony', 321)
obj4 = Mysql('kevin', 222)
print(id(obj3), id(obj4))
基于模块调用实现单例模式
''' 1, 先在配置文件中 正常的写一个类,由类来产生一个对象 '''
class instance:
def __init__(self,name,age):
self.name = name
self.age = age
def func1(self):
print('func1')
obj = instance('张无忌',18)
''' 2, 通过模块调用的方法来使用这个对象,这个对象就是单例模式 '''
from XXX import xxx
xxx.obj
xxx.obj.name
xxx.obj.age
基于装饰器实现单例模式
def Singleton(cls):
_instance = cls('moon',18)
def inner(*args,**kwargs):
if args or kwargs:
ojb = cls(*args,**kwargs)
return ojb
return _instance
return inner
@Singleton
class Mysql:
def __init__(self,name,age):
self.name = name
self.ahe = age
obj1 = Mysql()
obj2 = Mysql()
print(id(obj1),id(obj2))
obj2 = Mysql('11','22')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了