当前位置:   article > 正文

python设计模式——单例模式

python设计模式——单例模式

单例模式(Singleton Pattern)即一个类只能拥有一个实例对象,实例化多次的结果都会指向同一个对象。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

特点:全局唯一,允许更改

优点:

  • 避免对资源的多重占用,如写入文件操作
  • 节省内存
  • 防止命名空间被污染

缺点:

  • 没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化
通过继承方式实现单例模式:
# 继承实现

class Singleton:
    def __new__(cls,*args,**kwargs):

        if not hasattr(cls, 'ins'):
            singletonInsObject = super().__new__(cls,*args,**kwargs)
            setattr(cls, 'ins', singletonInsObject)
        return getattr(cls, 'ins')


class Category(Singleton):
    pass

if __name__ == '__main__':
    i= Category()
    print(id(i))

    c= Category()
    print(id(c))
	

# 2234442501712
# 2234442501712
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
通过装饰器实现单例模式
def warpper(clsObject):
    def  inner(*args , **kwargs):
        if not hasattr(clsObject, "ins"):
            singletonInsObject = clsObject(*args,**kwargs)
            setattr(clsObject, 'ins',singletonInsObject)
        return  getattr(clsObject, 'ins')
    return inner

@warpper
class Category:
    pass


if __name__ == '__main__':
    i= Category()
    print(id(i))

    c= Category()
    print(id(c))

# 1633213381360
# 1633213381360
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/907530
推荐阅读
相关标签
  

闽ICP备14008679号