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

    1.单例模式的实现方式

    '''
    单例模式: (手撸,一定要背下来。)
        1.通过classmethod
        2.通过装饰器实现
        3.通过__new__实现
        4.通过导入模块时实现
        5.通过元类实现。
    '''

    2.实现实例

    1.通过__new__实现

    class single:
    _instance = None def __new__(cls, *args, **kwargs): if cls._instance is None: cls._instance = super().__new__(cls) return cls._instance

    2.通过classmetod实现单例模式

    import settings
    
    
    # 通过classmethod
    class MySQL:
    
        # 一个默认值,用于判断对象是否存在, 对象不存在证明值是None
        # __instance是类的属性,可以由类来调用
        __instance = None   #   ---》 执行到代码的57行 ---》 obj
        # __instance = obj
    
        def __init__(self, host, port):
            self.host = host
            self.port = port
    
        @classmethod
        def singleton(cls, host, port):  # 单例方法 ---》 类方法
    
            # 判断__instance中若没有值,证明没有对象
            if not cls.__instance:
                # 产生一个对象并返回
                obj = cls(host, port)
                # None ---> obj
                cls.__instance = obj
    
            # 若__instance中有值,证明对象已经存在,则直接返回该对象
            return cls.__instance
    
        def start_mysql(self):
            print('启动mysql')
    
        def close(self):
            print('关闭mysql')
    
    
    obj1 = MySQL.singleton(settings.HOST, settings.PORT)
    obj1.start_mysql()
    print(obj1)
    obj2 = MySQL.singleton(settings.HOST, settings.PORT)
    print(obj2)
  • 相关阅读:
    ASP.NET和PHP全面对比
    GridView事件DataBinding,DataBound,RowCreated,RowDataBound区别及执行顺序分析
    OA、CRM、ERP之间的区别和联系是什么?
    C#继承
    对软件项目管理的几点认识
    冒泡
    经典排序算法
    asp.net遍历页面中所有TextBox,并赋值为String.Empty的方法
    String.Format用法
    frame和iframe
  • 原文地址:https://www.cnblogs.com/bigbox/p/11974394.html
Copyright © 2011-2022 走看看