美文网首页
单例模式总结

单例模式总结

作者: 爱藏书友 | 来源:发表于2018-10-30 16:23 被阅读0次
    
    
    class Singleton(object):
        def __new__(cls):
            if not hasattr(cls, 'instance'):
                cls.instance = super(Singleton, cls).__new__(cls)
            return cls.instance
    
    if __name__ == '__main__':
        s1 = Singleton()
        s2 = Singleton()
        print(id(s1))
        print(id(s2))
    
    print('='*60)
    
    
    class SingleLazy(object):
        _instance = None
        def __init__(self):
            if self._instance:
                print('object created.')
    
        @classmethod
        def getInstance(cls):
            if not cls._instance:
                cls._instance = SingleLazy()
            return cls._instance
    
    if __name__ == '__main__':
        s1 = SingleLazy.getInstance()
        print(id(s1))
        s2 = SingleLazy.getInstance()
        print(id(s2))
        s3 = SingleLazy()
        print(id(s3))
    
    print('='*60)
    
    
    class SingleMeta(type):
        _instances = {}
        def __call__(cls, *args, **kwargs):
            if cls not in cls._instances:
                cls._instances[cls] = super(SingleMeta, cls).__call__(*args, **kwargs)
            return cls._instances[cls]
    
    
    class LoggerDemo(metaclass=SingleMeta):
        pass
    
    if __name__ == '__main__':
        l1 = LoggerDemo()
        l2 = LoggerDemo()
        print(id(l1))
        print(id(l2))
    
    print('='*60)
    # 装饰器
    def singleton(cls, *args, **kwargs):
        _instances = {}
        def _singleton():
            if cls not in _instances:
                _instances[cls] = cls(*args, **kwargs)
            return _instances[cls]
        return _singleton
    
    
    @singleton
    class MysqlDB():
        pass
    
    if __name__ == '__main__':
        db1 = MysqlDB()
        db2 = MysqlDB()
        print(id(db1))
        print(id(db2))
    

    相关文章

      网友评论

          本文标题:单例模式总结

          本文链接:https://www.haomeiwen.com/subject/yywgtqtx.html