单例模式
简介
单例模式是指在内存中只会创建一次对象的设计模式,在程序中多次使用同一个对象且作用相同的时候,为了防止频繁的创建对象,单例模式可以让程序在内存中创建一个对象,让所有调用者都共享这一单例对象。
几种单例模式的demo
线程安全的单例模式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import threading
class Singleton(object):
_instance_lock = threading.Lock()
def __init__(self):
pass
def __new__(cls, *args, **kwargs):
if not hasattr(Singleton, "_instance"):
with Singleton._instance_lock:
if not hasattr(Singleton, "_instance"):
Singleton._instance = object.__new__(cls)
return Singleton._instance
|
使用
1
2
3
4
5
6
|
obj1 = Singleton()
obj2 = Singleton()
print(obj1,obj2)
# <__main__.Singleton object at 0x7fc6c6a57898> <__main__.Singleton object at 0x7fc6c6a57898>
|
多线程使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
def task(arg):
obj = Singleton()
print(obj)
for i in range(10):
t = threading.Thread(target=task,args=[i,])
t.start()
# <__main__.Singleton object at 0x7fc6c6a57898>
# <__main__.Singleton object at 0x7fc6c6a57898>
# <__main__.Singleton object at 0x7fc6c6a57898>
# <__main__.Singleton object at 0x7fc6c6a57898>
# <__main__.Singleton object at 0x7fc6c6a57898>
# <__main__.Singleton object at 0x7fc6c6a57898>
# <__main__.Singleton object at 0x7fc6c6a57898>
# <__main__.Singleton object at 0x7fc6c6a57898>
# <__main__.Singleton object at 0x7fc6c6a57898>
# <__main__.Singleton object at 0x7fc6c6a57898>
|