python设计模式第五天【单例模式】
1. 定义
一个类只有一个实例,提供访问该实例的全局方法
2.应用场景
(1)多线程之间共享对象资源
(2)整个程序空间中的全局变量,共享资源
(3)大规模程序的节省创建对象的时间
3.代码实现(使用饿汉式)
#!/usr/bin/env python # _*_ coding: UTF-8 _*_ from threading import Thread class Person(object): __instance = None def __init__(self): pass '''第一种实现方法,使用python类的魔术方法,在用户创建对象是调用''' def __new__(cls, *args, **kwargs): if cls.__instance is None: cls.__instance = object.__new__(cls, *args, **kwargs) return cls.__instance '''第二种实现方法,使用静态方法获取对象''' @staticmethod def getInstance(): if Person.__instance is None: Person.__instance = Person() return Person.__instance def foo(): print Person() def bar(): print Person.getInstance() if __name__ == "__main__": person1 = Person() print person1 person2 = Person() print person2 person3 = Person() print person3 person4 = Person.getInstance() print person4 person5 = Person.getInstance() print person5 for i in range(5): thread = Thread(target=foo(), args=()) thread.start() thread.join() for j in range(5): thread = Thread(target=bar(), args=()) thread.start() thread.join()
结果:
/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/day5_singleton/singleton_test.py <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> Process finished with exit code 0
注意:
(1)还可以使用懒汉式实现,即刚开始让__instance = Person()
python设计模式第五天【单例模式】的更多相关文章
- python设计模式---创建型之单例模式
数据结构和算法是基本功, 设计模式是最佳实现. 作为程序员,必须有空了就练一练哈. # coding = utf-8 """ # 经典单例 class Singleton ...
- 开发设计模式(五)单例模式(Singleton Pattern)
http://blog.sina.com.cn/s/blog_89d90b7c0101805m.html 单例模式:意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提 ...
- python设计模式之迭代器与生成器详解(五)
前言 迭代器是设计模式中的一种行为模式,它提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示.python提倡使用生成器,生成器也是迭代器的一种. 系列文章 python设计模 ...
- python设计模式之单例模式(一)
前言 单例模式是创建模式中比较常见和常用的模式,在程序执行的整个生命周期只存在一个实例对象. 系列文章 python设计模式之单例模式(一) python设计模式之常用创建模式总结(二) python ...
- Python设计模式 - 创建型 - 单例模式(Singleton) - 十种
对于很多开发人员来说,单例模式算是比较简单常用.也是最早接触的设计模式了,仔细研究起来单例模式似乎又不像看起来那么简单.我们知道单例模式适用于提供全局唯一访问点,频繁需要创建及销毁对象等场合,的确方便 ...
- python设计模式之单例模式(二)
上次我们简单了解了一下什么是单例模式,今天我们继续探究.上次的内容点这 python设计模式之单例模式(一) 上次们讨论的是GoF的单例设计模式,该模式是指:一个类有且只有一个对象.通常我们需要的是让 ...
- Python 设计模式之路
备注:本套笔记内容来源于互联网,只做学习使用,如有侵权请联系本笔记作者. 资料内容 Python 设计模式之路(一)——设计模式 初识 Python 设计模式之路(二)——简单工厂.工厂.抽象工厂模式 ...
- python设计模式之内置装饰器使用(四)
前言 python内部有许多内建装饰器,它们都有特别的功能,下面对其归纳一下. 系列文章 python设计模式之单例模式(一) python设计模式之常用创建模式总结(二) python设计模式之装饰 ...
- python设计模式之装饰器详解(三)
python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...
随机推荐
- 史上最简单的springboot国际化多语言切换实现方案
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 前提: 在resources目录下建立 messages_en_US.properti ...
- day14(1)--递归、匿名函数、内置函数
一.递归 定义:本质上是回溯和递推 回溯:询问答案的过程 递推:推出答案的过程 前提: 回溯到一个有结果的值开始递推 回溯与递推的条件要有规律 方式: 直接递归:自己调用自己 间接递归:通过别人来调用 ...
- Spring Security(六):2.3 Release Numbering
It is useful to understand how Spring Security release numbers work, as it will help you identify th ...
- Linux如何查看端口状态
netstat命令各个参数说明如下: -t : 指明显示TCP端口 -u : 指明显示UDP端口 -l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的 ...
- Charles 抓包工具绿化过程记录
1.下载官方的软件,并安装. 下载地址:https://www.charlesproxy.com/latest-release/download.do 根据需求下载即可 2.使用在线破解工具生成jar ...
- 解决git commit 大文件推送失败
//查找大文件 git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5 //根据上面查找到的hash值,筛选文 ...
- Shiro安全框架入门笔记
入门 1.simpleRealmTest package cn.realm; import org.apache.shiro.SecurityUtils; import org.apache.shir ...
- Autofac踩坑经历
背景 接口框架使用反射,动态生成Controller,使用Autofac进行依赖注入,并替换默认DependencyResolver及IControllerFactory,Controller实例化代 ...
- 4月27号开学! 第6期《jmeter实战接口自动化+性能》课程,零基础也能学
2019年 第6期<jmeter实战接口自动化+性能>课程,4月27号开学! 主讲老师:飞天小子 上课方式:QQ群视频在线教学 本期上课时间:4月27号-6月9号,每周六.周日晚上20:0 ...
- js canvas图片压缩
function preview_picture(pic){ var r=new FileReader(); r.readAsDataURL(pic); r.onload=function(e){ d ...