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

    # 单例模式
    
    # 模式一基于@classmethod
    class test:
        _instance = None
    
        def __init__(self, name=None):
            self.name = name
    
        @classmethod
        def singlenton(cls):
            if not cls._instance:
                cls._instance = test(name='hkj')
            return cls._instance
    
    
    obj1 = test().singlenton()
    obj2 = test().singlenton()
    
    
    # 单例模式二基于装饰器
    def outer(cls):
        _instance = cls('hkj')
        def inner(*args, **kwargs):
            if args or kwargs:
                obj = cls(*args, **kwargs)
                return obj
            else:
                return _instance
        return inner
    
    
    @outer
    class test2:
        def __init__(self, name):
            self.name = name
    
    
    obj3 = test2()
    obj4 = test2()
    
    
    #基于__call__ 基于元类
    class MyMeta(type):
        def __new__(cls,name,bases,dic):
            print(name,bases,dic)
            return super().__new__(cls,name,bases,dic)
    
        def __call__(self, *args, **kwargs):
    
            if not getattr(self, '_instance'):
                self._instance = super().__call__(*args, **kwargs)
            return self._instance
    
    
    class test3(metaclass=MyMeta):
        _instance = None
        def __init__(self, name):
            print(222)
            self.name = name
    
    
    
    #基于模块的导入单例
  • 相关阅读:
    Daily Scrum 10.31
    Daily Scrum 10.30
    Daily Scrum 10.29
    Daily Scrum 10.28
    扩展设置
    安装
    james+javamail入门
    解决ZF2_PATH environment
    Apache Httpd Server 2.2升级2.4
    缓存,spring
  • 原文地址:https://www.cnblogs.com/huikejie/p/11277729.html
Copyright © 2011-2022 走看看