Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5467456
  • 博文数量: 922
  • 博客积分: 19333
  • 博客等级: 上将
  • 技术积分: 11226
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-27 14:33
文章分类

全部博文(922)

文章存档

2023年(1)

2020年(2)

2019年(1)

2017年(1)

2016年(3)

2015年(10)

2014年(17)

2013年(49)

2012年(291)

2011年(266)

2010年(95)

2009年(54)

2008年(132)

分类: Python/Ruby

2012-03-31 10:06:45



单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

 

实现“某个类只有一个实例”途径:

1、让一个全局变量使得一个对象被访问,但是它不能防止外部实例化多个对象。

2、让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建。即单例模式。

 

多线程时的单例模式:加锁——双重锁定。

 

饿汉式单例类:在类被加载时就将自己实例化(静态初始化)。其优点是躲避了多线程访问的安全性问题,缺点是提前占用系统资源。

懒汉式单例类:在第一次被引用时,才将自己实例化。避免开始时占用系统资源,但是有多线程访问安全性问题。

 

#encoding=utf-8 

#by panda 

#单例模式 

 

def printInfo(info): 

    print unicode(info, 'utf-8').encode('gbk') 

 

import threading 

#单例类 

class Singleton(): 

    instance = None 

    mutex = threading.Lock()   

    def __init__(self): 

        pass 

    

    @staticmethod 

    def GetInstance(): 

        if(Singleton.instance == None): 

            Singleton.mutex.acquire()  

            if(Singleton.instance == None): 

                printInfo('初始化单例') 

                Singleton.instance = Singleton() 

            else: 

                printInfo('单例已经初始化')   

            Singleton.mutex.release() 

        else: 

            printInfo('单例已经初始化')         

        return Singleton.instance 

 

def clientUI(): 

    Singleton.GetInstance() 

    Singleton.GetInstance() 

    Singleton.GetInstance() 

    return 

 

if __name__ == '__main__': 

    clientUI(); 

 

 

类图:

.

摘自 ponder008的专栏

阅读(1115) | 评论(0) | 转发(0) |
0

上一篇:什么

下一篇:微笑

给主人留下些什么吧!~~