抽象工厂角色(creator):具体工厂角色的抽象类接口(具体工厂角色的父类)
具体工厂角色(Concreat creator):用于客户端调用以创建对应的具体产品角色的对象
抽象产品角色(Product):具体产品类的抽象类接口(具体产品角色的父类)
具体产品角色(Concreat Product):被具体具体工厂角色所调用需要创建的类
#!/usr/bin/evn python
# coding=utf-8
from abc import ABCMeta,abstractmethod
# 供货商抽象类---抽象产品定义
class Supplier(metaclass=ABCMeta):
# 定义抽象方法,卖出商品的方法,买家通过这个方法来获取对象
@abstractmethod
def make(self):
pass
# 商品具体化
class Yan(Supplier):
def make(self):
print("商铺提供订单需求-开始生产盐")
return self
class Bingjilin(Supplier):
def make(self):
print("商铺提供订单需求-生产冰激凌")
return self
# ===========================================
# 工厂抽象类---抽象工厂定义
class FactoryShopMetaclass(metaclass=ABCMeta):
# 定义抽象方法,卖出商品的方法,买家通过这个方法来获取对象
@abstractmethod
def sell_product(self, objprodeuct=None, num=1):
pass
# 生产烟的工厂类--工厂实现类
class YanFactoryShopMetaclass(FactoryShopMetaclass):
# 卖出烟商品的方法,买家通过这个方法来获取对象--默认永远只是生产烟的对象
def sell_product(self, objprodeuct="Yan", num=1):
product = [eval(objprodeuct)().make() for i in range(0, num)]
return "卖出烟了num:" + str(len(product))
# 生产烟的工厂类--工厂实现类
class BingjilinFactoryShopMetaclass(FactoryShopMetaclass):
# 卖出冰激凌商品的方法,买家通过这个方法来获取对象--默认永远只是生产冰激凌的对象
def sell_product(self, objprodeuct="Bingjilin", num=1):
product = [eval(objprodeuct)().make() for i in range(0, num)]
return "卖出冰激凌了num:" + str(len(product))
if __name__ == '__main__':
# print( globals())
# 开始有人光顾商店了,有人说要烟,冰激凌,食盐,我开始问工厂索要对象
print("***" * 20)
# 问烟工厂要3包烟
print('问烟工厂要3包烟:',YanFactoryShopMetaclass().sell_product(num=3))
print("***" * 20)
# 问冰激凌工厂要2个
print('问冰激凌工厂要2个',YanFactoryShopMetaclass().sell_product(num=2))
输出结果:
************************************************************
商铺提供订单需求-开始生产盐
商铺提供订单需求-开始生产盐
商铺提供订单需求-开始生产盐
问烟工厂要3包烟: 卖出烟了num:3
************************************************************
商铺提供订单需求-开始生产盐
商铺提供订单需求-开始生产盐
问冰激凌工厂要2个 卖出烟了num:2
上面的代码中,
简书:https://www.jianshu.com/u/d6960089b087
掘金:https://juejin.cn/user/2963939079225608
小钟同学 | 文 【原创】| QQ:308711822
1:本文相关描述主要是个人的认知和见解,如有不当之处,还望各位大佬指正。 2:关于文章内容,有部分内容参考自互联网,如有链接会声明标注;如没有及时标注备注的链接的,如有侵权请联系,我会立即删除处理哟。
原文作者:程序员小钟同学;如有侵权,请联系管理员删除。