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 设计模式之单例模式 Singleton Pattern的更多相关文章
- 乐在其中设计模式(C#) - 单例模式(Singleton Pattern)
原文:乐在其中设计模式(C#) - 单例模式(Singleton Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 单例模式(Singleton Pattern) 作者:weba ...
- 设计模式之单例模式(Singleton Pattern)
单例模式 单例模式(Singleton Pattern)在java中算是最常用的设计模式之一,主要用于控制控制类实例的数量,防止外部实例化或者修改.单例模式在某些场景下可以提高系统运行效率.实现中的主 ...
- 【设计模式】单例模式 Singleton Pattern
通常我们在写程序的时候会碰到一个类只允许在整个系统中只存在一个实例(Instance) 的情况, 比如说我们想做一计数器,统计某些接口调用的次数,通常我们的数据库连接也是只期望有一个实例.Windo ...
- 二十四种设计模式:单例模式(Singleton Pattern)
单例模式(Singleton Pattern) 介绍保证一个类仅有一个实例,并提供一个访问它的全局访问点. 示例保证一个类仅有一个实例. Singleton using System; using S ...
- 乐在其中设计模式(C#) - 单例模式(Singleton Pattern)【转】
介绍 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 示例 保证一个类仅有一个实例. Singleton using System; using System.Collections.Gene ...
- Java 设计模式(三)-单例模式(Singleton Pattern)
1 概念定义 1.1 定义 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 1.2 类型 创建类模式 1.3 难点 1)多个虚拟机 当系统中的单例类被拷贝运行在多 ...
- 【UE4 设计模式】单例模式 Singleton Pattern
概述 描述 保证一个类只有一个实例 提供一个访问该实例的全局节点,可以视为一个全局变量 仅在首次请求单例对象时对其进行初始化. 套路 将默认构造函数设为私有, 防止其他对象使用单例类的 new运算符. ...
- 浅谈设计模式--单例模式(Singleton Pattern)
题外话:好久没写blog,做知识归纳整理了.本来设计模式就是个坑,各种文章也写烂了.不过,不是自己写的东西,缺少点知识的存在感.目前还没做到光看即能记住,得写.所以准备跳入设计模式这个大坑. 开篇先贡 ...
- 设计模式系列之单例模式(Singleton Pattern)——确保对象的唯一性
模式概述 模式定义 模式结构图 饿汉式单例与懒汉式单例 饿汉式单例 懒汉式单例 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 主要优点 适用场景 说明:设计模式系列文章是读刘伟所著 ...
随机推荐
- Metasploit3
1.之前使用的版本是Metasploit2的版本操作系统是基于Ubuntu的,渗透测测试模块也是基于metasploit的,基本上没有设置,Metasploitable3添加了很多安全机制 ,防火墙和 ...
- 1.1“Linux操作系统”部署
---恢复内容开始--- 1.2.1 版本说明 操作系统版本:CentOS6.5 64位 1.2.2 部署条件说明 无 1.2.3 部署步骤说明 centos6.5 操作系统安装 1.创建虚拟机 2. ...
- 复习整理(一)——HDFS
1.问题 分布式文件系统那么多,为什么hadoop项目中还要开发一个分布式文件系统呢? 2.存储模型 文件线性字节切割成块(Block),具有offset,id 文件与文件的block大小可以不一样 ...
- linux系统编程之管道(三)
今天继续研究管道的内容,这次主要是研究一下命名管道,以及与之前学过的匿名管道的区别,话不多说,进入正题: 所以说,我们要知道命名管道的作用,可以进行毫无关系的两个进程间进行通讯,这是匿名管道所无法实现 ...
- 《Exceptioning团队》第六次作业:团队项目系统设计改进与详细设计
一.项目基本介绍 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 Exception 作业学习目标 1.掌握面向对象软件设计方法:2.完善系统设计 ...
- (三)WCF之契约
自从我们接收ITOO项目之后,就必须跟WCF打交道,既然必须直面WCF,我就对WCF进行了研究(还不是很深入,是自己目前的理解).之前对WCF的一些基础知识进行了简单的介绍,本篇重点来介绍WCF的契约 ...
- mvn的使用和搭建环境
一 创建一个maven项目必须要下载maven,maven的主要功能有两个 1.可以动态配置项目所依赖的jar包,在maven下载目录下/conf/settings.xml中可以配置本地类存储库,配置 ...
- C++数组排序泛型算法
//数组排序泛型算法 #include <vector> #include <iostream> #include <algorithm> //内置泛型算法头文件 ...
- php自定义函数之参数的引用
在变量这个函数中,我们学习了变量的引用,我们来回顾一下知识:大理石平台支架 <?php $a = 10; $b = &$a; $a = 100; echo $a.'---------'. ...
- YAML_05 定义一个变量创建用户,设置密码
ansible]# vim user2.yml --- - hosts: cache remote_user: root vars: user: wangwu tasks: ...