python 设计模式之单例模式 Singleton Pattern

 

 

 

#引入

一个类被设计出来,就意味着它具备某种行为(方法),属性(成员变量)。通常状况下,当咱们想使用这个类时,会使用new 关键字,这时候jvm会帮咱们构造一个该类的实例。这么作会比较耗费资源。python

若是能在jvm启动时就new好,或者是某一次new好后之后不再用new了,这样就能节省不少资源了。多线程

这就是单例模式要解决的问题。jvm

 

 

# 单例实现步骤

要实现一个单例类,须要通过三个步骤:ide

一、私有化构造函数,目的是避免其它类能够建立这个类的对象;函数

二、在本类中建立惟一实例对象(由于构造函数私有化了,因此单例类的惟一实例对象只能在单例类里面建立;),使用一个私有静态的成员变量保存spa

三、对外提供一个公开的静态的函数供别人获取这个惟一实例对象线程

 

 

#单例的两种实现方法:

1)饿汉式设计

特色:在加载类的同时就建立了这个类的惟一实例;对象

好处:可保证这个类的实例的惟一性;blog

弊端:若是只是使用这个类,可是暂时不须要它的对象,也会建立惟一实例,形成内存的浪费;

代码模板:

 

 

 

2)懒汉式:

特色:在第一次调用获取实例的方法时才建立对象;

好处:第一次调用获取实例的方法时才建立对象,能够避免内存的浪费;

弊端:多线程环境下不能保证明例的惟一性;

代码模板:

 

 

 

 

 

 上面两种是从人家博客里面截图的,比较清晰的说明了饿汉模式和懒汉模式的区别

 

 #单例模式的优势

1)严格控制对惟一的实例的访问方式(能够容许有限数量的实例)

2)仅有一个实例,能够节约系统资源

 

 #单例模式的缺点

1)单例模式没有抽象层,扩展比较困难

2)职责太重,即充当工厂角色,有充当产品角色。

3)若是长期不使用,Java会自动回收,致使下次使用又从新实例化。

 

 #单例模式的特色

1)有且仅有一个单例类实例(没法经过反序列化从新构建对象)

2)构造函数私有化

3)经过静态方法或枚举得到单例类实例

 

 

#python实现单例模式

#(1)
class Test: def __new__(cls): if not hasattr(cls,'instance'): cls.instance=super(Test,cls).__new__(cls) return cls.instance obj1=Test() obj2=Test() print(obj1 is obj2) #(2) def singleton(cls): instances={} def getinstance(*args,**kwargs): if cls not in instances: instances[cls]=cls(*args,**kwargs) return instances[cls] return getinstance @singleton class MyClass: a=1 c1=MyClass() c2=MyClass() print(c1==c2)

 还有其余的,我也不想再写了

 

什么是单例?为何要用单例?

一个类被设计出来,就表明它表示具备某种行为(方法),属性(成员变量),而通常状况下,当咱们想使用这个类时,会使用new关键字,这时候jvm会帮咱们构造一个该类的实例。而咱们知道,对于new这个关键字以及该实例,相对而言是比较耗费资源的。因此若是咱们可以想办法在jvm启动时就new好,或者在某一次实例new好之后,之后再也不须要这样的动做,就可以节省不少资源了。


做者:jsbintask22
连接:http://www.imooc.com/article/279430
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合做

什么是单例?为何要用单例?

一个类被设计出来,就表明它表示具备某种行为(方法),属性(成员变量),而通常状况下,当咱们想使用这个类时,会使用new关键字,这时候jvm会帮咱们构造一个该类的实例。而咱们知道,对于new这个关键字以及该实例,相对而言是比较耗费资源的。因此若是咱们可以想办法在jvm启动时就new好,或者在某一次实例new好之后,之后再也不须要这样的动做,就可以节省不少资源了。


做者:jsbintask22
连接:http://www.imooc.com/article/279430
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合做

#参考

http://www.imooc.com/article/279430

 https://baijiahao.baidu.com/s?id=1619543284145447185&wfr=spider&for=pc

http://www.sohu.com/a/141927148_812245

相关文章
相关标签/搜索