• 分分钟带你理解单例


    单例模式的讲解以及用处

    什么是单例模式用处何在?

    答:单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实列存在,当你希望整个系统中只能出现一个实列时,这个时候单例对象就可以派上用场了。

    举个列子!!

    比如、某个服务器程序的配置信息存放在一个文件中,客户端通过一个AppConfig的类来读取配置文件的信息。如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建AppConfig对象实列,这就导致系统中存在多个AppConfig的实列对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多的情况下,事实上类似AppConfig这样的类,我们希望在程序运行期间只存在一个实例对象。

    用 __new__来创建单例

    如果想使得某个类从始至终最多只有一个实例,使用__new__方法会很简单,Python中类是通过__new__来创建实例的。

     1 class A(object):
     2     def __new__(cls, *args, **kwargs):
     3         if not hasattr(cls,'_inst'):
     4             cls._inst = super(A, cls).__new__(cls, *args, **kwargs)
     5         return cls._inst
     6 if __name__ == '__main__':
     7     class B(A):
     8         def __init__(self,s):
     9             self.s = s
    10     ret = A()
    11     ret1 = B('two')
    12     print id(ret),ret
    13     print id(ret1),ret1.s
    14 
    15 #结果
    16 53445264 <__main__.A object at 0x032F8290>
    17 53445392 two

    通过__new__方法,将类的实例在创建的时候绑定到类属性_inst,如果cls._inst为None,说明类还没实例化,实列化并将实例绑定到cls._inst,以后每次实例化的时候都返回第一次实列化创建的实例,注意从A派生子类的时候,不要重载__new__。

  • 相关阅读:
    OSI 和 TCP/IP 网络分层
    java 类加载器
    操作系统 内存管理
    基础线程机制
    java 互斥同步
    数据库引擎
    java 内存分配与回收策略
    Redis基础
    二进制
    node版本管理nvm科学用法
  • 原文地址:https://www.cnblogs.com/wuyongcong/p/7247833.html
Copyright © 2020-2023  润新知