本文主要是介绍python单例模式练习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
单例设计模式是怎么来的?
单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。
在面向对象的程序设计中,当业务并发量非常大时,那么就会出现重复创建相同的对象,每创建一个对象就会开辟一块内存空间,而这些对象其实是一模一样的,那么有没有办法使用得内存对象只创建一次,然后再随处使用呢?单例模式就是为了解决这个问题而产生的。
比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信息。如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig 对象的实例,这就导致系统中存在多个 AppConfig 的实例对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多的情况下。事实上,类似 AppConfig 这样的类,我们希望在程序运行期间只存在一个实例对象。
实现方式:
1、创建一个类静态字段(类变量)__instance
2、创建一个静态函数,通过函数的逻辑判断 __instance 是否已存在,如不存在就将对象值赋于__instance,即__instance = 类(),否则直接返回__instance,也即创建的对象都是一样的
3、使用单例模式创建对象时直接通过类调用静态函数创建即可
#普通模式
class A(object):def __init__(self,name,male):self.name = nameself.name = male#实例化多个对象
obj1 = A('ben','boy')
obj2 = A('min','girl')
obj3 = A('miao','boy')
##打印内存地址,可以看到内存地址都是不一样的
print (id(obj1),id(obj2),id(obj3))#单例模式
class A(object):__instance = Nonedef __init__(self,name,male):self.name = nameself.name = male@staticmethoddef create_obj():if not A.__instance:A.__instance = A('ben','boy')return A.__instanceelse:return A.__instance#单例模式实例化多个对象
obj1 = A.create_obj()
obj2 = A.create_obj()
obj3 = A.create_obj()
##打印内存地址,可以看到内存地址都是一样的
print (id(obj1),id(obj2),id(obj3))class singlemodle(object):__instance = None#如果类属性__instance = None,就创建一个对象,并赋值为这个对象的引用#保证下次调用时,能知道已经创建这过个对象,这样就保证了只有一个对象def __new__(cls, *args, **kwargs):if not cls.__instance:cls.__instance = object.__new__(cls)return cls.__instancea = singlemodle(1,2)
b = singlemodle(3,4)
print(id(a),id(b))
结果:
51938128 51938160 51938192
51938224 51938224 51938224
51938192 51938192
这篇关于python单例模式练习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!