使用装(修饰器)来实现单例模式

Posted apollo1616

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用装(修饰器)来实现单例模式相关的知识,希望对你有一定的参考价值。

import threading


# 装饰器
def synchronized(func):
    func.__lock__ = threading.Lock()

    def synced_func(*args, **kws):
        with func.__lock__:
            return func(*args, **kws)

    return synced_func


# 使用修饰器来实现单例模式
def singleton(cls):
    instances = {}

    @synchronized
    def get_instance(*args, **kw):
        if cls not in instances:
            instances[cls] = cls(*args, **kw)
        return instances[cls]

    return get_instance


def worker():
    single_test = Test()
    print("id----> %s" % id(single_test))


@singleton
class Test(object):
    a = 1


if __name__ == "__main__":
    task_list = []
    for one in range(5):
        t = threading.Thread(target=worker)
        task_list.append(t)

    for one in task_list:
        one.start()

    for one in task_list:
        one.join()

以上是关于使用装(修饰器)来实现单例模式的主要内容,如果未能解决你的问题,请参考以下文章

Android 深入理解单例模式

Python中的单例模式——装饰器实现剖析

单例模式

设计模式之单例模式

设计模式之单例模式

设计模式之单例模式