简介
工厂模式用于要创建对象的场景,有一个约束就是,这些对象的功能相似。让我看一个生活中的例子吧,小卖铺引进饮料!
由上图看出,小卖铺引进饮料经过两个角色:
- 批发商:这家伙知道怎么弄到各个品牌的饮料,并且这家伙能熟知市面上流通着哪几个牌子
- 工厂: 专注生产自己品牌的饮料
我们编程中的的工厂模式和这个类似,编程中的工厂模式需要两个角色:
- 入口: 将请求转向真正的处理类,以及异常处理(比如说你要处理的格式,你没有定义处理类)
- 处理类:真正的处理请求的类
实战
"""
@author: hananmin
@time: 2022/3/23 14:23
"""
# 处理json格式的工厂
class JsonDataFactory:
def __init__(self, data):
self.data = data
@property
def handle_data(self):
return f'你的数据是json数据==>{self.data}'
# 处理xml格式的工厂
class XmlDataFactor:
def __init__(self, data):
self.data = data
@property
def handle_data(self):
return f"你处理的数据是xml数据==>{self.data}"
# 入口
def factory_entrance(data):
if "json" in data:
return JsonDataFactory(data).handle_data
elif "xml" in data:
return XmlDataFactor(data).handle_data
else:
return "未识别的数据类型"
if __name__ == '__main__':
print(factory_entrance("我是json数据"))
print(factory_entrance("我是xml数据"))
- factory_entrance: 是入口方法,将请求数据转向正确的工厂类,处理异常
- JsonDataFactory和JsonDataFactory:真正处理数据的工厂类
抽象工厂模式
从上面的例子可以看出,当工厂类要处理的工作比较复杂的时候,工厂类会很臃肿。这时候可以将工厂类的部分功能独立出去。可以通过抽象工厂模式达到目的。
抽象工厂将工厂类分为两部分,借用上面可乐的例子:
- 组件工厂: 为抽象工厂生产半成品,可以有多个。在可乐的例子中,组件工厂生产:铝罐、矿泉水、糖浆等
- 抽象工厂:组装半成品。 在可乐的例子中,抽象工厂将各个半成品组成可乐。