Python本身不提供抽象类和接口机制,要想实现抽象类,可以借助abc模块。abc是Abstract Base Class的缩写。
接口(有点像抽象类、抽象方法)使用@abstractmethod
定义:一种特殊的类,声明了若干方法,要求继承该接口的类必须实现这种方法,
作用:限制继承接口的类的方法的名称及调用方式,隐藏了类的内部实现。
单例:一个类只有一个实例
实现:
2.1在__new__分配内存空间的时候限制
def __new__(cls,*args,**kwargs):
if not hasattr(cls,"instance"):
cls.instance=super().__new__(cls,*args,**kwargs)
return cls.instance
2.21:使用模块:python模块是一个天然的单例模式,在模块第一次导入时,会生成.pyc文件
,第二次时候就会直接加载.pyc文件而不会直接执行代码块.所以可以将代码放在一个文件中,然后
导入该模块
2.3 使用装饰器:限制类的实例化次数
def Singleton(cls):
_instance = {}
def _singleton(*args, **kargs):
if cls not in _instance:#判断该实例是否存在,存在就直接返回,不存在就创建
_instance[cls] = cls(*args, **kargs)
return _instance[cls]
return _singleton
工厂模式:定义一个创建对象的接口,让实现这个接口的类来决定实例化那个类,有点像多态和模板
建造者模式:将所有细节都交由子类实现,用抽象类实现