-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path单例模式
41 lines (33 loc) · 1.2 KB
/
单例模式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#单例模式是一种常用的软件设计模式。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。
#__new__方法实现:
class Singleton(object):
# 创建一个类变量__instance
__instance = None
# __new__会返回一个创建的实例
def __new__(cls, name, age):
# 如果类属性__instance的值为None,那么就创建一个对象
if not cls.__instance:
#cls.__instance = super(Singleton,cls).__new__(cls)
cls.__instance = object.__new__(cls)
# 如果已经有实例存在,直接返回
return cls.__instance
a = Singleton("Zhangsan", 18)
b = Singleton("lisi", 20)
print(id(a))
print(id(b))
#装饰器实现
def singleton(cls, *args, **kw):
instances = {}
def getinstance():
# 判断某类是否在字典中,不存在的话,将cls作为key,cls(* **,作为value存到字典中)
if cls not in instances:
instances[cls] = cls(*args, **kw)
return instances[cls]
return getinstance
@singleton
class MyClass:
pass
a = MyClass()
b = MyClass()
print(id(a))
print(id(b))