抽象工厂角色(creator):具体工厂角色的抽象类接口(具体工厂角色的父类)
具体工厂角色(Concreat creator):用于客户端调用以创建对应的具体产品角色的对象
抽象产品角色(Product):具体产品类的抽象类接口(具体产品角色的父类)
具体产品角色(Concreat Product):被具体具体工厂角色所调用需要创建的类
#!/usr/bin/evn python
# coding=utf-8
from abc import ABCMeta, abstractmethod
# 烟类消费品抽象类
class YanleiXiafeipin(metaclass=ABCMeta):
# 定义抽象方法
@abstractmethod
def make(self):
pass
# 中华烟
class QinghuaYan(YanleiXiafeipin):
def make(self):
print("中华烟-消费品-开始生产")
return self
# 红塔山
class HongTashanYan(YanleiXiafeipin):
def make(self):
print("红塔山-消费品-开始生产")
return self
# ===========================================
# 食盐--消费品抽象类
class ShiyongYanXiafeipin(metaclass=ABCMeta):
# 定义抽象方法
@abstractmethod
def make(self):
pass
# 鲁晶盐
class Lujingyan(ShiyongYanXiafeipin):
def make(self):
print("鲁晶盐-消费品-开始生产")
return self
# 淮盐
class Huaiyan(ShiyongYanXiafeipin):
def make(self):
print("红塔山-消费品-开始生产")
return self
# 工厂抽象类---抽象工厂定义
class FactoryShopMetaclass(metaclass=ABCMeta):
# 卖烟
@abstractmethod
def sell_YanleiXiafeipin_product(self, objprodeuct=None, num=1):
pass
# 卖盐
@abstractmethod
def sell_ShiyongYanXiafeipin_product(self, objprodeuct=None, num=1):
pass
# A工厂类--主营业务是销售中华烟和鲁晶盐
class AFactoryShop(FactoryShopMetaclass):
# 卖中华烟
def sell_YanleiXiafeipin_product(self, objprodeuct='QinghuaYan', num=1):
product = [eval(objprodeuct)().make() for i in range(0, num)]
return "卖出中华烟了num:" + str(len(product))
# 卖鲁晶盐
def sell_ShiyongYanXiafeipin_product(self, objprodeuct='Lujingyan', num=1):
product = [eval(objprodeuct)().make() for i in range(0, num)]
return "卖出鲁晶盐了num:" + str(len(product))
# B工厂类--主营业务是销售红塔山和淮盐
class BFactoryShop(FactoryShopMetaclass):
# 卖红塔山
def sell_YanleiXiafeipin_product(self, objprodeuct='HongTashanYan', num=1):
product = [eval(objprodeuct)().make() for i in range(0, num)]
return "卖出红塔山了num:" + str(len(product))
# 卖淮盐
def sell_ShiyongYanXiafeipin_product(self, objprodeuct='Huaiyan', num=1):
product = [eval(objprodeuct)().make() for i in range(0, num)]
return "卖出淮盐了num:" + str(len(product))
if __name__ == '__main__':
# print( globals())
# 开始有人光顾商店了,有人说要烟,冰激凌,食盐,我开始问工厂索要对象
print("***" * 20)
print('问A烟工厂要3包中华烟:', AFactoryShop().sell_YanleiXiafeipin_product(num=3))
print("-" * 10)
print('问A烟工厂要2包鲁晶盐:', AFactoryShop().sell_ShiyongYanXiafeipin_product(num=3))
print("***" * 20)
print('问B烟工厂要4包红塔山:', BFactoryShop().sell_YanleiXiafeipin_product(num=4))
print("-" * 10)
print('问B烟工厂要1包淮盐:', BFactoryShop().sell_ShiyongYanXiafeipin_product(num=1))
输出结果:
************************************************************
中华烟-消费品-开始生产
中华烟-消费品-开始生产
中华烟-消费品-开始生产
问A烟工厂要3包中华烟: 卖出中华烟了num:3
----------
鲁晶盐-消费品-开始生产
鲁晶盐-消费品-开始生产
鲁晶盐-消费品-开始生产
问A烟工厂要2包鲁晶盐: 卖出鲁晶盐了num:3
************************************************************
红塔山-消费品-开始生产
红塔山-消费品-开始生产
红塔山-消费品-开始生产
红塔山-消费品-开始生产
问B烟工厂要4包红塔山: 卖出红塔山了num:4
----------
红塔山-消费品-开始生产
问B烟工厂要1包淮盐: 卖出淮盐了num:1
上面的代码中,
简书:https://www.jianshu.com/u/d6960089b087
掘金:https://juejin.cn/user/2963939079225608
小钟同学 | 文 【原创】| QQ:308711822
1:本文相关描述主要是个人的认知和见解,如有不当之处,还望各位大佬指正。 2:关于文章内容,有部分内容参考自互联网,如有链接会声明标注;如没有及时标注备注的链接的,如有侵权请联系,我会立即删除处理哟。
原文作者:程序员小钟同学;如有侵权,请联系管理员删除。