python设计模式第五天单例模式
Posted liuzhiqaingxyz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python设计模式第五天单例模式相关的知识,希望对你有一定的参考价值。
1. 定义
一个类只有一个实例,提供访问该实例的全局方法
2.应用场景
(1)多线程之间共享对象资源
(2)整个程序空间中的全局变量,共享资源
(3)大规模程序的节省创建对象的时间
3.代码实现(使用饿汉式)
#!/usr/bin/env python # _*_ coding: UTF-8 _*_ from threading import Thread class Person(object): __instance = None def __init__(self): pass ‘‘‘第一种实现方法,使用python类的魔术方法,在用户创建对象是调用‘‘‘ def __new__(cls, *args, **kwargs): if cls.__instance is None: cls.__instance = object.__new__(cls, *args, **kwargs) return cls.__instance ‘‘‘第二种实现方法,使用静态方法获取对象‘‘‘ @staticmethod def getInstance(): if Person.__instance is None: Person.__instance = Person() return Person.__instance def foo(): print Person() def bar(): print Person.getInstance() if __name__ == "__main__": person1 = Person() print person1 person2 = Person() print person2 person3 = Person() print person3 person4 = Person.getInstance() print person4 person5 = Person.getInstance() print person5 for i in range(5): thread = Thread(target=foo(), args=()) thread.start() thread.join() for j in range(5): thread = Thread(target=bar(), args=()) thread.start() thread.join()
结果:
/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/day5_singleton/singleton_test.py <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> <__main__.Person object at 0x107d331d0> Process finished with exit code 0
注意:
(1)还可以使用懒汉式实现,即刚开始让__instance = Person()
以上是关于python设计模式第五天单例模式的主要内容,如果未能解决你的问题,请参考以下文章