目录
单例模式
这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
主要解决:一个全局使用的类频繁地创建与销毁。
何时使用:当您想控制实例数目,节省系统资源的时候。
如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
应用:例如,数据库连接,可使用一个对象进行connect和close
__new__
class Singleton(object):
def __new__(cls, *args, **kw):
if not hasattr(cls, '_instance'):
orig = super(Singleton, cls)
cls._instance = orig.__new__(cls, *args, **kw)
return cls._instance
class Test(Singleton):
a = 1
test1 = Test()
test2 = Test()
print(id(test1), id(test2))
结果
1982801213000 1982801213000
装饰器
def singleton(cls):
instance = None
def inner(*arg, **kwargs):
nonlocal instance
if instance is None:
instance = cls(*arg, **kwargs)
return instance
return inner
@singleton
class Test:
a = 1
test1 = Test()
test2 = Test()
print(id(test1), id(test2))
网上很多教程instance 使用的字典,不清楚有什么好处
结果
1950255183048 1950255183048
元类
class SingletonMeta(type):
"""自定义单例元类"""
def __init__(cls, *args, **kwargs):
cls.__instance = None
super().__init__(*args, **kwargs)
def __call__(cls, *args, **kwargs):
if cls.__instance is None:
cls.__instance = super().__call__(*args, **kwargs)
return cls.__instance
class President(metaclass=SingletonMeta):
pass
import
某个文件中实例化类,获得对象,其他文件导入对象即可。
更多python相关内容:【python总结】python学习框架梳理
本人b站账号:lady_killer9
有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。