码迷,mamicode.com
首页 > 编程语言 > 详细

Python设计模式——单例模式

时间:2014-10-16 21:20:53      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   使用   ar   for   

单例模式是日常应用中最广泛的模式了,其目的就是令到单个进程中只存在一个类的实例,从而可以实现数据的共享,节省系统开销,防止io阻塞等等

但是在多进程的应用中,单例模式就实现不了了,例如一些web应用,django,这些,因为会启动多条进程来监听http请求,这样的会通过单例模式是实现不了数据共享的,也就是实现不了单例模式的目的了,这时可以尝试使用redis这些nosql数据库阿里实现数据共享,因为它们的读取数据库,当然也可以用mysql等数据库来共享,但是并发量一大,系统的压力就会很大了。

#encoding=utf-8
__author__ = kevinlu1010@qq.com

class Singleton(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls,_the_instance):
            cls._the_instance=object.__new__(cls,*args, **kwargs)
        return cls._the_instance

class A(Singleton):
    print init before
    def __init__(self):
        print i am __init__
    def f(self):
        print i am f

a=A()
b=A()
a.f()
print done

这里写了个Singleton的类,通过重新__new__方法,可以查找当前进程有没有该类的实例,如果有就返回该实例,如果没有就新建一个

实例化两次A类(实际只实例化了一次)‘init before‘只会print一次,但是‘i am __init__‘是会print两次的,所以不想重复执行的代码要放在’init before‘的位置

 

Python设计模式——单例模式

标签:style   blog   http   color   io   os   使用   ar   for   

原文地址:http://www.cnblogs.com/Xjng/p/4029563.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!