单例模式:一个实例,一个对象。用来创建单个实例(对象)
拿数据库的连接池来举例,每个用户的数据库访问请求,都应该只去一个连接池中拿资源。一个连接池就是一个实例。单例模式就可以应用在这里场景下
实现单例模式的思路:
- 在类的内部自定义一个方法去创建实例,因为使用默认的init构造方法创建实例是不可控的
- 创建一个旗标变量,该变量保存一个对象实例,创建对象的方法如果检测到该变量已经有值了,就直接将该对象返回,如果没有值,则执行首次创建,并为旗标变量赋值
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
| class A:
instance = None
def __init__(self, name): self.name = name
@classmethod def get_instance(cls, name): if cls.instance: return cls.instance else: obj = cls(name) cls.instance = obj return obj
a1 = A.get_instance("PolarSnow") a2 = A.get_instance("PolarSnow")
print(a1) print(a2)
------------ <__main__.A object at 0x101377b38> <__main__.A object at 0x101377b38>
|