当前位置:首页>python>python: Generators Pattern

python: Generators Pattern

  • 2026-10-11 07:13:17
python: Generators Pattern
项目结构:
# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Generators Pattern 生成器模式# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/6/11 21:10# User      :  geovindu# Product   : PyCharm# Project   : pydesginpattern# File      : request_type.pyfrom enum import Enumclass JewelryRequestType(Enum):    """    """    PROCUREMENT = "procurement"    PRODUCTION = "production"    QUALITY_CHECK = "quality_check"    SALES = "sales"    AFTER_SALES = "after_sales"    INVENTORY = "inventory"    # 多语言显示名称    def get_display_name(self, lang):        mapping = {            "zh": {                "procurement": "原料采购",                "production": "首饰加工",                "quality_check": "品质检验",                "sales": "销售订单",                "after_sales": "售后维保",                "inventory": "库存管理"            },            "en": {                "procurement": "Procurement",                "production": "Production",                "quality_check": "Quality Check",                "sales": "Sales",                "after_sales": "After Sales",                "inventory": "Inventory"            }        }        return mapping[lang][self.value]# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Generators Pattern 生成器模式# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/6/11 21:37# User      :  geovindu# Product   : PyCharm# Project   : pydesginpattern# File      : language.pyfrom enum import Enumclass Language(Enum):    """    """    ZH = "zh"   # 中文    EN = "en"   # 英文# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Generators Pattern 生成器模式# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/6/11 21:38# User      :  geovindu# Product   : PyCharm# Project   : pydesginpattern# File      : zh.pyZH_MESSAGES = {    "title": "===== 企业级珠宝业务系统 - 生成器模式并发处理 =====",    "procurement": "已处理:{material} 询价,报价:{price}/克",    "production": "已接收:{product},工期:{days} 天",    "quality_check": "{product}:钻石等级 {grade},合格✅",    "sales": "{product} 已下单,会员:{member}",    "after_sales": "{service} 已受理,取件时间:3天后",    "inventory": "{warehouse} 库存:{stock} 件",    "unsupported": "不支持的请求类型",    "error": "处理失败:{err}",    # 动态数据翻译    "999黄金": "999黄金",    "18K金钻石戒指": "18K金钻石戒指",    "50分钻戒": "50分钻戒",    "古法黄金手镯": "古法黄金手镯",    "钻戒改圈口": "钻戒改圈口",    "上海总仓": "上海总仓",}# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Generators Pattern 生成器模式# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/6/11 21:38# User      :  geovindu# Product   : PyCharm# Project   : pydesginpattern# File      : en.pyEN_MESSAGES = {    "title": "===== Enterprise Jewelry System - Generator Pattern Concurrent Processing =====",    "procurement": "Processed: {material} inquiry, price: {price}/g",    "production": "Accepted: {product}, lead time: {days} days",    "quality_check": "{product}: Diamond grade {grade}, Passed✅",    "sales": "{product} ordered, member: {member}",    "after_sales": "{service} accepted, ready in 3 days",    "inventory": "{warehouse} stock: {stock} pcs",    "unsupported": "Unsupported request type",    "error": "Processing failed: {err}",    # 动态数据翻译    "999黄金": "999 Gold",    "18K金钻石戒指": "18K Gold Diamond Ring",    "50分钻戒": "0.5ct Diamond Ring",    "古法黄金手镯": "Ancient Gold Bracelet",    "钻戒改圈口": "Ring Resizing",    "上海总仓": "Shanghai Main Warehouse",}# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Generators Pattern 生成器模式 pip install pydantic# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/6/11 21:11# User      :  geovindu# Product   : PyCharm# Project   : pydesginpattern# File      : dto.pyfrom pydantic import BaseModelfrom GeneratorsPattern.common.request_type import JewelryRequestTypefrom GeneratorsPattern.common.language import Languageclass JewelryRequest(BaseModel):    """统一请求模型(严格校验请求结构)"""    request_type: JewelryRequestType  # 枚举强校验    data: dict                       # 业务参数    lang: Language = Language.ZH  # 自动带语言class JewelryResponse(BaseModel):    """统一响应模型"""    request_type: str    handler_name: str = ""  # 修复:给默认值,非必须    result: str    success: bool = True
# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Generators Pattern 生成器模式# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/6/11 21:12# User      :  geovindu# Product   : PyCharm# Project   : pydesginpattern# File      : registry.pyfrom typing import Callable, Dictfrom GeneratorsPattern.common.request_type import JewelryRequestType# 全局处理器注册表(唯一来源)HANDLER_REGISTRY: Dict[JewelryRequestType, Callable] = {}def register_handler(request_type: JewelryRequestType):    """    装饰器:注册业务处理器    【扩展方式】:新增业务只需 @register_handler 标注    """    def decorator(handler_func: Callable) -> Callable:        HANDLER_REGISTRY[request_type] = handler_func        return handler_func    return decorator# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Generators Pattern 生成器模式# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/6/11 21:13# User      :  geovindu# Product   : PyCharm# Project   : pydesginpattern# File      : procurement.pyfrom GeneratorsPattern.service.registry import register_handlerfrom GeneratorsPattern.common.request_type import JewelryRequestTypefrom GeneratorsPattern.i18n import get_messagefrom GeneratorsPattern.common.language import Language@register_handler(JewelryRequestType.PROCUREMENT)def procurement_handler(data: dict, lang:Language) -> str:    """    原料采购处理器(只做采购业务)    :param data:    :return:    """    #return f"已处理:{data['material']} 询价,报价:{data['price']}/克"    return get_message(lang, "procurement", **data)# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Generators Pattern 生成器模式# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/6/11 21:14# User      :  geovindu# Product   : PyCharm# Project   : pydesginpattern# File      : production.pyfrom GeneratorsPattern.service.registry import register_handlerfrom GeneratorsPattern.common.request_type import JewelryRequestTypefrom GeneratorsPattern.i18n import get_messagefrom GeneratorsPattern.common.language import Language@register_handler(JewelryRequestType.PRODUCTION)def production_handler(data: dict, lang:Language) -> str:    """    首饰加工处理器    :param data:    :return:    """    #return f"已接收:{data['product']},工期:{data['days']} 天"    return get_message(lang, "production", **data)# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Generators Pattern 生成器模式# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/6/11 21:15# User      :  geovindu# Product   : PyCharm# Project   : pydesginpattern# File      : quality.pyfrom GeneratorsPattern.service.registry import register_handlerfrom GeneratorsPattern.common.request_type import JewelryRequestTypefrom GeneratorsPattern.i18n import get_messagefrom GeneratorsPattern.common.language import Language@register_handler(JewelryRequestType.QUALITY_CHECK)def quality_check_handler(data: dict, lang:Language) -> str:    """    品质检验处理器    """    #return f"{data['product']}:钻石等级 {data['grade']},合格✅"    return get_message(lang, "quality_check", **data)# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Generators Pattern 生成器模式# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/6/11 21:16# User      :  geovindu# Product   : PyCharm# Project   : pydesginpattern# File      : sales.pyfrom GeneratorsPattern.service.registry import register_handlerfrom GeneratorsPattern.common.request_type import JewelryRequestTypefrom GeneratorsPattern.i18n import get_messagefrom GeneratorsPattern.common.language import Language@register_handler(JewelryRequestType.SALES)def sales_handler(data: dict, lang:Language) -> str:    """    销售订单处理器    :param data:    :return:    """    #return f"{data['product']} 已下单,会员:{data['member']}"    return get_message(lang, "sales", **data)# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Generators Pattern 生成器模式# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/6/11 21:17# User      :  geovindu# Product   : PyCharm# Project   : pydesginpattern# File      : after_sales.pyfrom GeneratorsPattern.service.registry import register_handlerfrom GeneratorsPattern.common.request_type import JewelryRequestTypefrom GeneratorsPattern.i18n import get_messagefrom GeneratorsPattern.common.language import Language@register_handler(JewelryRequestType.AFTER_SALES)def after_sales_handler(data: dict, lang:Language) -> str:    """    售后维保处理器    :param data:    :return:    """    #return f"{data['service']} 已受理,取件时间:3天后"    return get_message(lang, "after_sales", **data)# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Generators Pattern 生成器模式# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/6/11 21:18# User      :  geovindu# Product   : PyCharm# Project   : pydesginpattern# File      : inventory.pyfrom GeneratorsPattern.service.registry import register_handlerfrom GeneratorsPattern.common.request_type import JewelryRequestTypefrom GeneratorsPattern.i18n import get_messagefrom GeneratorsPattern.common.language import Language@register_handler(JewelryRequestType.INVENTORY)def inventory_handler(data: dict, lang:Language) -> str:    """    库存管理处理器    :param data:    :return:    """    #return f"{data['warehouse']} 库存:{data['stock']} 件"    return get_message(lang, "inventory", **data)# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Generators Pattern 生成器模式# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/6/11 21:19# User      :  geovindu# Product   : PyCharm# Project   : pydesginpattern# File      : generator.pyfrom typing import Generator,Listfrom GeneratorsPattern.model.dto import JewelryRequest, JewelryResponsefrom GeneratorsPattern.service.registry import HANDLER_REGISTRYfrom GeneratorsPattern.i18n import get_messageclass JewelryRequestGenerator:    @staticmethod    def dispatch(reqs: List[JewelryRequest]) -> Generator[JewelryResponse, None, None]:        for req in reqs:            handler = HANDLER_REGISTRY.get(req.request_type)            if not handler:                yield JewelryResponse(                    request_type=req.request_type.value,                    handler_name="unknown",                    result=get_message(req.lang, "unsupported"),                    success=False                )                continue            try:                result = handler(req.data, req.lang)                success = True            except Exception as e:                result = get_message(req.lang, "error", err=str(e))                success = False            # 修复:补上 handler_name            yield JewelryResponse(                request_type=req.request_type.value,                handler_name=handler.__name__,                result=result,                success=success            )# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Generators Pattern 生成器模式# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/6/11 21:20# User      :  geovindu# Product   : PyCharm# Project   : pydesginpattern# File      : request_router.pyfrom typing import Listfrom GeneratorsPattern.model.dto import JewelryRequestfrom GeneratorsPattern.service.generator import JewelryRequestGeneratorclass JewelryRequestAPI:    """    系统入口:接收并发请求,提交给生成器分发    """    @staticmethod    def process_requests(requests: List[JewelryRequest]):        """        :param requests:        :return:        """        return JewelryRequestGenerator.dispatch(requests)    @staticmethod    def process(reqs: List[JewelryRequest]):        """        :param reqs:        :return:        """        return JewelryRequestGenerator.dispatch(reqs)
调用:
# encoding: utf-8# 版权所有  2026 ©涂聚文有限公司™ ®# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎# 描述:Generators Pattern 生成器模式# Author    : geovindu,Geovin Du 涂聚文.# IDE       : PyCharm 2024.3.6 python 3.11# os        : windows 10# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j# Datetime  : 2026/6/11 21:22# User      :  geovindu# Product   : PyCharm# Project   : pydesginpattern# File      : GeneratorsBll.pyimport GeneratorsPattern.service.handlersfrom GeneratorsPattern.api.request_router import JewelryRequestAPIfrom GeneratorsPattern.model.dto import JewelryRequestfrom GeneratorsPattern.common.request_type import JewelryRequestTypefrom GeneratorsPattern.i18n import get_messagefrom GeneratorsPattern.common.language import Languageclass GeneratorsBll(object):    """    """    def demo(self):        """        :return:        """        # ====================== 在这里切换语言 ======================        LANG = Language.ZH  # 纯中文        # LANG = Language.EN  # 纯英文        print(get_message(LANG, "title"))        reqs = [            JewelryRequest(request_type=JewelryRequestType.PROCUREMENT, data={"material": "999黄金", "price": 628},                           lang=LANG),            JewelryRequest(request_type=JewelryRequestType.PRODUCTION, data={"product": "18K金钻石戒指", "days": 7},                           lang=LANG),            JewelryRequest(request_type=JewelryRequestType.QUALITY_CHECK,                           data={"product": "50分钻戒", "grade": "VS1/D"}, lang=LANG),            JewelryRequest(request_type=JewelryRequestType.SALES, data={"product": "古法黄金手镯", "member": "VIP888"},                           lang=LANG),            JewelryRequest(request_type=JewelryRequestType.AFTER_SALES, data={"service": "钻戒改圈口"}, lang=LANG),            JewelryRequest(request_type=JewelryRequestType.INVENTORY, data={"warehouse": "上海总仓", "stock": 126},                           lang=LANG),        ]        for resp in JewelryRequestAPI.process(reqs):            mark = "✅" if resp.success else "❌"            # 关键:自动显示中文/英文名称            req_type = JewelryRequestType(resp.request_type).get_display_name(lang=LANG.value)            print(f"{mark} [{req_type:<12s}] {resp.result}")
输出:

最新文章

随机文章