python代码实现单利模式

一、单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。

  许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。

二、使用__new__()方法
  在new方法中把类实例绑定到类变量_instance上,如果cls._instance为None表示该类还没有实例化过,实例化该类并返回。如果cls_instance不为None表示该类已实例化,直接返回cls_instance.
class SingleTon(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, "_instances"):  # 查看当前类中是否有_instances这个变量
            cls._instances = object.__new__(cls, *args, **kwargs)
        return cls._instances


class TestClass(SingleTon):
    a = 1


test1 = TestClass()
test2 = TestClass()


print(test1.a, test2.a)
test1.a = 2

print(test1.a, test2.a)
print(id(test1.a), id(test2.a))

三、使用装饰器(decorator)

def SingleTon(cls, *args, **kwargs):
    instance = {}
    def _singleton():
        if cls not in instance:
            instance[cls] = cls(*args, **kwargs)
        return instance[cls]
    return _singleton


@SingleTon
class TestClass(object):
    a = 1


test1 = TestClass()
test2 = TestClass()

print(test1.a, test2.a)
test1.a = 2

print(test1.a, test2.a)
print(id(test1.a), id(test2.a))

四、python模板

class My_SingleTon(object):
    def foo(self):
        pass
my_sign = My_SingleTon()

my_sign.foo()
原文地址:https://www.cnblogs.com/youhongliang/p/12908013.html