python 设计模式之单例模式 Singleton Pattern
#引入
一个类被设计出来,就意味着它具有某种行为(方法),属性(成员变量)。一般情况下,当我们想使用这个类时,会使用new 关键字,这时候jvm会帮我们构造一个该类的实例。这么做会比较耗费资源。
如果能在jvm启动时就new好,或者是某一次new好后以后再也不用new了,这样就能节省很多资源了。
这就是单例模式要解决的问题。
# 单例实现步骤
要实现一个单例类,需要经过三个步骤:
1、私有化构造函数,目的是避免其它类可以创建这个类的对象;
2、在本类中创建唯一实例对象(因为构造函数私有化了,所以单例类的唯一实例对象只能在单例类里面创建;),使用一个私有静态的成员变量保存
3、对外提供一个公开的静态的函数供别人获取这个唯一实例对象
#单例的两种实现方法:
1)饿汉式
特点:在加载类的同时就创建了这个类的唯一实例;
好处:可保证这个类的实例的唯一性;
弊端:如果只是使用这个类,但是暂时不需要它的对象,也会创建唯一实例,造成内存的浪费;
代码模板:
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
相关文章
- 实例解析Python设计模式编程之桥接模式的运用
- Python使用设计模式中的责任链模式与迭代器模式的示例
- Python使用设计模式中的责任链模式与迭代器模式的示例
- 【python cookbook】【字符串与文本】4.文本模式的匹配和查找
- 简介Python设计模式中的代理模式与模板方法模式编程
- 实例解析Python设计模式编程之桥接模式的运用
- Python使用设计模式中的责任链模式与迭代器模式的示例
- python+rabbitMQ实现生产者和消费者模式
- MVC模式:python案例
- Python设计模式中单例模式的实现及在Tornado中的应用
- 【华为OD机试Python实现】HJ41 称砝码(中等)
- Python:设计模式之单例模式
- python 设计模式之解释器(Interpreter)模式
- python 设计模式之中介者模式
- python 设计模式之访问者模式
- 解决opencv-python 在2k采集模式下,录制问题
- Python小白的数学建模课-A2.2021年数维杯C题(运动会优化比赛模式探索)探讨
- 设计模式(Python语言)----代理模式
- 设计模式(Python语言)----单例模式