zoukankan      html  css  js  c++  java
  • 单例模式

    单例模式:

    class MySocketClient:
        __instance = None
    
        # 单例模式(同一时间只有一个实例)
        def __new__(cls, *args, **kwargs):
            if MySocketClient.__instance is None:
                MySocketClient.__instance = object.__new__(cls, *args, **kwd) #object.__new__ 实例化
                ip_port = (configuration.get('server_ip'), configuration.get('server_port'))
                cls.sk = socket.socket()
                cls.conn = cls.sk.connect(ip_port)
            return MySocketClient.__instance
    

      如果MySocketClient.__instance为原始值,就对MySocketClient类进行实例化(object.__new__(cls, *args, **kwd))并赋值给MySocketClient.__instance,

    4.基于__new__方法实现的单例模式(推荐使用,方便)


    1> 一个对象的实例化过程是先执行类的__new__方法,如果我们没有写,默认会调用object的__new__方法,返回一个实例化对象,然后再调用__init__方法,对这个对象进行初始化,我们可以根据这个实现单例.
    2> 在一个类的__new__方法中先判断是不是存在实例,如果存在实例,就直接返回,如果不存在实例就创建.

    # encoding:utf-8
    __author__ = 'Fioman'
    __time__ = '2020/5/26 12:36'
    import threading
    
    
    class Singleton(object):
        _instance_lock = threading.Lock()
    
        def __init__(self, *args, **kwargs):
            pass
    
        def __new__(cls, *args, **kwargs):
            if not hasattr(cls, '_instance'):
                with Singleton._instance_lock:
                    if not hasattr(cls, '_instance'):
                        Singleton._instance = super().__new__(cls)
    
                return Singleton._instance
    
    
    obj1 = Singleton()
    obj2 = Singleton()
    print(obj1, obj2)
    
    
    def task(arg):
        obj = Singleton()
        print(obj)
    
    
    for i in range(10):
        t = threading.Thread(target=task, args=[i, ])
        t.start()
    

      

  • 相关阅读:
    WSDL
    对协程的理解
    调用webServer
    待看
    BZOJ4668 冷战(并查集)
    BZOJ4651 NOI2016网格(割点)
    Lyft Level 5 Challenge 2018
    BZOJ3073 PA2011Journeys(线段树+bfs)
    BZOJ4602 SDOI2016齿轮(搜索)
    BZOJ4597 SHOI2016随机序列(线段树)
  • 原文地址:https://www.cnblogs.com/linuxws/p/12964731.html
Copyright © 2011-2022 走看看