抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无需指定所要产品的具体类就能得到同族的不同等级的产品的模式结构
抽象工厂核心:
1:为同系列产品构造对象
2:绕开"new"来创建对象
class Factory:
def create(self):
return XXX() # 构造新对象
只需要"new"一个工厂出来 ,我就能生产很多XXX对象了
一组相关或相互依赖的对象
这说的是两个或多个对象之间存在相互依赖或相关的关系。比如在实现生活中对应笔:有笔盖、笔芯、笔筒,我买只新笔的时候应该得到的是个整只笔
而不是一部分。
无需指定所要产品的具体类就能得到同族的不同等级的产品
这里所说的就是“一系列”的意思。如我买钢笔你应该给我整只笔,而不是只给我笔盖或笔芯;或我买水笔你给我的应包含笔盖、笔芯、笔筒。
通用类图

实例
'''
抽象工厂模式
例子:笔与笔盖
'''
import abc
class AbsPen(abc.ABC):
@abc.abstractmethod
def write(self):
pass
class WaterPen(AbsPen):
def write(self, s):
return "水彩笔"
class BallPen(AbsPen):
def write(self):
return "圆珠笔"
class AbsCover(abc.ABC):
@abc.abstractmethod
def close(self):
pass
class WaterPenCover(AbsCover):
def close(self):
return "水彩笔盖"
class BallPenCover(AbsCover):
def close(self):
return "圆珠笔盖"
class IPenFactory(abc.ABC):
# 生产钢笔
@abc.abstractmethod
def new_pen(self):
pass
# 生产笔盖
@abc.abstractmethod
def new_cover(self):
pass
class BallPenFactory(IPenFactory):
def new_pen(self):
return BallPen()
def new_cover(self):
return BallPenCover()
class WaterPenFactory(IPenFactory):
def new_pen(self):
return WaterPen()
def new_cover(self):
return WaterPenCover()
if __name__ == "__main__":
factory = BallPenFactory()
# 生产3套
pen1 = factory.new_pen()
cover1 = factory.new_cover()
pen2 = factory.new_pen()
cover2 = factory.new_cover()
pen3 = factory.new_pen()
cover3 = factory.new_cover()
print(pen1.write())
print(cover1.close())