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

    单例模式:

    多次实例化的结果指向同一个实例

    settings文件内容:
    IP='1.1.1.1'
    PORT=3306
    ================================================================
    单例模式实现方式一:
    import settings

    class MySQL:
    __instance=None
    def __init__(self, ip, port):
    self.ip = ip
    self.port = port

    @classmethod
    def from_conf(cls):
    if cls.__instance is None:
    cls.__instance=cls(settings.IP, settings.PORT)
    return cls.__instance
    obj1=MySQL.from_conf()
    obj2=MySQL.from_conf()
    obj3=MySQL.from_conf()
    obj4=MySQL('1.1.1.3',3302)
    print(obj1)
    print(obj2)
    print(obj3)
    print(obj4)
    ==========================================================================
    单例模式实现方式二:
    import settings

    def singleton(cls):
    _instance=cls(settings.IP,settings.PORT)
    def wrapper(*args,**kwargs):
    if len(args) !=0 or len(kwargs) !=0:
    obj=cls(*args,**kwargs)
    return obj
    return _instance
    return wrapper

    @singleton #MySQL=singleton(MySQL) #MySQL=wrapper
    class MySQL:
    def __init__(self, ip, port):
    self.ip = ip
    self.port = port

    obj1=MySQL() #wrapper()
    obj2=MySQL() #wrapper()
    obj3=MySQL() #wrapper()
    obj4=MySQL('1.1.1.3',3302) #wrapper('1.1.1.3',3302)
    print(obj1)
    print(obj2)
    print(obj3)
    print(obj4)

    ==========================================================================

     

    单例模式实现方式三:
    import settings

    class Mymeta(type):
    def __init__(self,class_name,class_bases,class_dic):
    #self=MySQL这个类
    self.__instance=self(settings.IP,settings.PORT)

    def __call__(self, *args, **kwargs):
    # self=MySQL这个类
    if len(args) != 0 or len(kwargs) != 0:
    obj=self.__new__(self)
    self.__init__(obj,*args, **kwargs)
    return obj
    else:
    return self.__instance

    class MySQL(metaclass=Mymeta): #MySQL=Mymeta(...)
    def __init__(self, ip, port):
    self.ip = ip
    self.port = port


    obj1=MySQL()
    obj2=MySQL()
    obj3=MySQL()
    obj4=MySQL('1.1.1.3',3302)
    print(obj1)
    print(obj2)
    print(obj3)
    print(obj4)

    ==========================================================================

     

    单例模式实现方式四:
    def f1():
    from singleton import instance
    print(instance)

    def f2():
    from singleton import instance,My
    SQL
    print(instance)
    obj=MySQL('1.1.1.3',3302)
    print(obj)

    f1()
    f2()

    singletod文件内容:
    import settings

    class MySQL:
    print('run....')
    def __init__(self, ip, port):
    self.ip = ip
    self.port = port

    instance=MySQL(settings.IP,settings.PORT)
  • 相关阅读:
    我爱java系列之---【微服务间的认证—Feign拦截器】
    我爱java系列之---【设置权限的三种解决方案】
    581. Shortest Unsorted Continuous Subarray
    129. Sum Root to Leaf Numbers
    513. Find Bottom Left Tree Value
    515. Find Largest Value in Each Tree Row
    155. Min Stack max stack Maxpop O(1) 操作
    painting house
    Minimum Adjustment Cost
    k Sum
  • 原文地址:https://www.cnblogs.com/zhangpang/p/9580411.html
Copyright © 2011-2022 走看看