设计模式之单例模式

2018-07-31 分类:Python 阅读(274) 评论(0)

什么是设计模式,我们写代码就是为了解决一些实际的问题,当然在我们之前已经有很多优秀的程序员写了很多的代码,总结出来了某一类问题成熟的解决方案,我们拿来用就可以了。

设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

那什么是单例模式呢,它有什么具体的作用呢?

单例模式说直白一点就是只有一个实例,不管实例化多少次就只有一个实例。

举个例子来说,我们打开qq音乐,不管你打开几次,都只会有那一个qq音乐,打开多了放了好几首歌没法听了;再比如说回收站,你打开再多次只会打开一个。这就是用的是单例设计模式。

那在python里面怎么怎么实现单例模式呢,单例模式就是只有一个实例,那肯定是指类在实例化的时候,只会实例化一个,就需要用到类里面的一个内置函数__new__,类就是通过这个函数来进行实例化操作的。它在__init__之前先执行

那我们知道类是通过__new__函数来进行实例化的,那就好办了,思路就是先判断一下这个类有没有被实例化过,如果实例化过了,那我们就不要调用继续实例化了,返回原来的那个实例,如果没有被实例化才继续实例化。

先写一个普通的类,看一下实例化之后的内存地址,可以看到,正常的一个类,实例化两次,内存地址是不一样的,不是一个对象

再写单例模式,再实例化看内存地址

ps:重写__new__这个方法,如果想实例化必须调用一个父类的__new__(cls)方法,要不然不能实例化,单例模式的写法也很单一,死记硬背就可以了,代码如下:

 

 

 

您可能也喜欢:

协程、gevent实现异步io、进程、线程、协程对比

异步io的说白了就是遇到io操作的时候,就停下来去做别的事情。io分网络io和磁盘io,网络io比如说打开一个网站获取数据,下载一首歌等等,磁盘io就是把数据存到一个文件里面,写到磁盘上。 从网站上获取数据或者把数据写到磁盘上都是需要时间的,那就得等待了,这样的话,很多任务的时候就比较慢了,而异步i...

more

迭代器、生成器

迭代器只有在调用next的时候才会取数据(所以省内存),或者循环的时候,一个对象里面实现了__iter__方法,iter方法里面返回了一个迭代器,那就是一个可迭代对象了。 下面的代码,首先实现了iter方法,这个对象就是一个可迭代对象了,然后又返回了self就是自己,就是一个迭代器了。 使用for ...

more

socket、tcp/ip协议、udp协议

socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,...

more

评论&留言
欢迎新朋友你的到来!
还没有人抢沙发呢~
昵称

登录

忘记密码 ?

切换登录

注册