分分钟带你理解单例

简介: 单例模式的讲解以及用处 什么是单例模式用处何在? 答:单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实列存在,当你希望整个系统中只能出现一个实列时,这个时候单例对象就可以派上用场了。

单例模式的讲解以及用处

什么是单例模式用处何在?

答:单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实列存在,当你希望整个系统中只能出现一个实列时,这个时候单例对象就可以派上用场了。

举个列子!!

比如、某个服务器程序的配置信息存放在一个文件中,客户端通过一个AppConfig的类来读取配置文件的信息。如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建AppConfig对象实列,这就导致系统中存在多个AppConfig的实列对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多的情况下,事实上类似AppConfig这样的类,我们希望在程序运行期间只存在一个实例对象。

用 __new__来创建单例

如果想使得某个类从始至终最多只有一个实例,使用__new__方法会很简单,Python中类是通过__new__来创建实例的。

 1 class A(object):
 2     def __new__(cls, *args, **kwargs):
 3         if not hasattr(cls,'_inst'):
 4             cls._inst = super(A, cls).__new__(cls, *args, **kwargs)
 5         return cls._inst
 6 if __name__ == '__main__':
 7     class B(A):
 8         def __init__(self,s):
 9             self.s = s
10     ret = A()
11     ret1 = B('two')
12     print id(ret),ret
13     print id(ret1),ret1.s
14 
15 #结果
16 53445264 <__main__.A object at 0x032F8290>
17 53445392 two

通过__new__方法,将类的实例在创建的时候绑定到类属性_inst,如果cls._inst为None,说明类还没实例化,实列化并将实例绑定到cls._inst,以后每次实例化的时候都返回第一次实列化创建的实例,注意从A派生子类的时候,不要重载__new__。

目录
相关文章
|
前端开发 JavaScript 安全
跨域的五种最常见解决方案
跨域的五种最常见解决方案
216 0
|
10月前
|
SQL 网络安全 数据库
GBase 8a集群V8客户端gccli适配欧拉操作系统绕行方案分析
GBase 8a集群V8客户端gccli适配欧拉操作系统绕行方案分析
|
8月前
|
机器学习/深度学习 人工智能 编解码
阿里开源AI视频生成大模型 Wan2.1:14B性能超越Sora、Luma等模型,一键生成复杂运动视频
Wan2.1是阿里云开源的一款AI视频生成大模型,支持文生视频和图生视频任务,具备强大的视觉生成能力,性能超越Sora、Luma等国内外模型。
2376 2
阿里开源AI视频生成大模型 Wan2.1:14B性能超越Sora、Luma等模型,一键生成复杂运动视频
|
算法 数据库 异构计算
Milvus 2.3.功能全面升级,核心组件再升级,超低延迟、高准确度、MMap一触开启数据处理量翻倍、支持GPU使用!
Milvus 2.3.功能全面升级,核心组件再升级,超低延迟、高准确度、MMap一触开启数据处理量翻倍、支持GPU使用!
Milvus 2.3.功能全面升级,核心组件再升级,超低延迟、高准确度、MMap一触开启数据处理量翻倍、支持GPU使用!
|
小程序 开发者
微信小程序使用vant组件所出现的一些问题
微信小程序使用vant组件所出现的一些问题
385 0
Springboot集成 Sharding-JDBC + Mybatis-Plus实现分库分表(源码)
Sharding-jdbc是开源的数据库操作中间件;定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
|
IDE 网络安全 开发工具
在PyCharm中连接云端资源进行代码调试
通过PyCharm ToolKit连接ModelArts,您可在PyCharm中便捷地使用云端计算资源进行代码开发。
738 0
在PyCharm中连接云端资源进行代码调试
|
SQL Oracle 关系型数据库
Oracle 中 Translate的用法
Oracle 中 Translate的用法
215 0
|
Java API 网络架构
Java微服务开发指南 -- 使用Dropwizard构建微服务
使用Dropwizard构建微服务     Dropwizard的历史要早于Spring Boot和WildFly Swarm,它最早是在2011.12发布的v0.1.0版本,在本文编写的过程中,它已经发布了v0.9.2版本,而v1.0.0版本也在准备中了。
5191 0
|
前端开发 JavaScript 应用服务中间件
网站的动静分离实践(动静分离)
动静分离的实现思路动静分离是将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。 动静分离的一种做法是将静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则静态资源的请求全部请求nginx服务器,达到动静分离的目标。
2036 0