博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式
阅读量:4708 次
发布时间:2019-06-10

本文共 1135 字,大约阅读时间需要 3 分钟。

单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。即在整个程序或系统运行过程中一个类只能实例化一个对象。

比如,通常服务器程序的配置信息会存放在一个文件中,通过一个配置类进行读取,在程序运行过程中很多地方都需要配置信息,此时如果每次读取配置信息的时候都实例化一个类,会造成资源浪费,所以此类配置类基本都只实例化一个对象。

Python 中有很多实现单例模式的方法,这里主要说明两种方法。

1 使用 __new__

可以通过改变 __new__ 方法来控制实例的创建过程。

class Singleton(object):    _instance = None    def __new__(cls, *args, **kw):        if not cls._instance:            cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)          return cls._instance  class MyClass(Singleton):      a = 1

将类的实例和一个类变量 _instance 关联起来,如果 cls._instance 为 None 则创建实例,否则直接返回 cls._instance 。

执行结果如下:

>>> one=MyClass()>>> two=MyClass()>>> one==twoTrue>>> one is twoTrue>>> id(one),id(two)(2068174505184, 2068174505184)

2 使用模块

其实,Python 的模块就是天然的单例模式,因为模块在第一次导入时,会生成 .pyc 文件,当第二次导入时,就会直接加载 .pyc 文件,而不会再次执行模块代码。因此,我们只需把相关的函数和数据定义在一个模块中,就可以获得一个单例对象了。如果我们真的想要一个单例类,可以考虑这样做:

# mysingleton.pyclass My_Singleton(object):    def foo(self):        pass my_singleton = My_Singleton()

将上面的代码保存在文件 mysingleton.py 中,然后这样使用:

from mysingleton import my_singleton my_singleton.foo()

参考链接:

701977-20190501094902261-873549745.png

转载于:https://www.cnblogs.com/banshaohuan/p/9824040.html

你可能感兴趣的文章
6 tips for recovering from a flop
查看>>
ArrayList、Vector、HashMap、HashTable、HashSet的默认初始容量、加载因子、扩容增量...
查看>>
Ubuntu14设置静态IP的地方
查看>>
计算几何 部分模板
查看>>
github:建立和删除一个fork
查看>>
改善WPF应用程序性能的10大方法 (转发)
查看>>
简单图片验证码
查看>>
Mac 修改Host 绑定host
查看>>
Python学习-23.Python中的函数——isinstance
查看>>
CF932F Escape Through Leaf 斜率优化、启发式合并
查看>>
jQuery获取同级元素
查看>>
移动端调试方法
查看>>
java虚拟机4.垃圾标记算法
查看>>
context.getResourceAsStream获取的是部署在服务器上面的文件位置 而不是我们本地的工程位置 意思是说获取的都是web下面的文件位置...
查看>>
usebean 使用语法
查看>>
jquery不能是使用普通的for循环 因为普通的for循环通过下表获取对象 如果通过下表获取对象的话 会转成dom对象...
查看>>
C#访问修饰符
查看>>
jmeter用Firefox录制https协议证书问题解决(转载)
查看>>
ABP 使用SwaggerUI汉化
查看>>
Performance Testing 系列
查看>>