zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    Variant 数组
    socket c/s分佈式編程
    多線程幾個方法說明
    hash表的使用
    MIS系统权限控制的一个简便方法
    git 使用总结
    让 VAGRANT 启动并运行起来
    深入理解 Laravel 中 config 配置加载原理
    Vagrant入门
    php开发APP接口(总结一)
  • 原文地址:https://www.cnblogs.com/youhongliang/p/12908013.html
Copyright © 2011-2022 走看看