单例模式
什么是单例模式:
单例模式就是指一个类只能有或者只实例化一个对象,并且以后所有的访问都访问该对象
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我们可以总结下什么情况下需要单例模式:
- 当每个实例都会占用资源,而且实例初始化会影响性能,这个时候就可以考虑使用单例模式,它给我们带来的好处是只有一个实例占用资源,并且只需初始化一次;
- 当有同步需要的时候,可以通过一个实例来进行同步控制,比如对某个共享文件(如日志文件)的控制,对计数器的同步控制等,这种情况下由于只有一个实例,所以不用担心同步问题。
当然所有使用单例模式的前提是我们的确用一个实例就可以搞定要解决的问题,而不需要多个实例,如果每个实例都需要维护自己的状态,这种情况下单例模式肯定是不适用的。作者:geekpy
链接:http://www.jianshu.com/p/ec6589e02e2f
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
------------------------------------------------------------------------------------------------------------------------------------------------
单例模式的优点:
1、由于单例模式要求在全局内只有一个实例,因而可以节省比较多的内存空间;
2、全局只有一个接入点,可以更好地进行数据同步控制,避免多重占用;
3、单例可长驻内存,减少系统开销。
单例模式的应用举例:
1、生成全局惟一的序列号;
2、访问全局复用的惟一资源,如磁盘、总线等;
3、单个对象占用的资源过多,如数据库等;
4、系统全局统一管理,如Windows下的Task Manager;
5、网站计数器。
一个单例模式
1 通过重写new方法 2 class single_instance(object): 3 __instance=None 4 def __init__(self): 5 pass 6 7 def __new__(cls, *args, **kwargs): 8 if cls.__instance==None: 9 cls.__instance=object.__new__(cls,*args,**kwargs) 10 return cls.__instance 11 12 a=single_instance() 13 b=single_instance() 14 print(a) 15 print(b) 16 输出结果如下: 17 <__main__.singleton object at 0x0000016D5191D320> 18 <__main__.singleton object at 0x0000016D5191D320>
另外一种不安全的单例模式
五种单例模式