python单例模式

2019-09-29  本文已影响0人  转身丶即天涯

参考资料:
https://zhuanlan.zhihu.com/p/37534850

什么是单例模式

就是全局作用域内只有一个实例的设计模式。
常见使用场景,比如数据库的连接对象,配置文件中的变量等等。

单例模式的实现

1.使用函数装饰器
# 1. decorator
def singleton(cls):
    _instance = {}

    def wrap():
        if cls not in _instance:
            _instance[cls] = cls()

        return _instance[cls]

    return wrap


@singleton
class A(object):
    def __init__(self):
        pass
2.使用类装饰器
# 2. class decorator
class Singleton(object):
    def __init__(self, cls):
        self._cls = cls
        self._instance = {}

    def __call__(self, *args, **kwargs):
        if self._cls not in self._instance:
            self._instance[self._cls] = self._cls()

        return self._instance[self._cls]


@Singleton
class B():
    def __init__(self):
        pass
3.使用new方法
class C(object):
    _instance = None

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = object.__new__(cls, *args, **kwargs)

        return cls._instance

    def __init__(self):
        pass
上一篇下一篇

猜你喜欢

热点阅读