python设计模式——单例模式

Published on
45

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

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

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

优点:

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

缺点:

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

1、通过继承方式实现单例模式

# 继承实现

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

2、通过装饰器实现单例模式

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

0