python: Generators Pattern

项目结构:

python 复制代码
# 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.py
 
from enum import Enum
 
class 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.py
 
from enum import Enum
 
class 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.py
 
ZH_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.py
EN_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.py
 
from pydantic import BaseModel
from GeneratorsPattern.common.request_type import JewelryRequestType
from GeneratorsPattern.common.language import Language
 
class 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
python 复制代码
# 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.py
from typing import Callable, Dict
from 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.py
 
 
from GeneratorsPattern.service.registry import register_handler
from GeneratorsPattern.common.request_type import JewelryRequestType
from GeneratorsPattern.i18n import get_message
from 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.py
from GeneratorsPattern.service.registry import register_handler
from GeneratorsPattern.common.request_type import JewelryRequestType
from GeneratorsPattern.i18n import get_message
from 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.py
from GeneratorsPattern.service.registry import register_handler
from GeneratorsPattern.common.request_type import JewelryRequestType
from GeneratorsPattern.i18n import get_message
from 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.py
 
from GeneratorsPattern.service.registry import register_handler
from GeneratorsPattern.common.request_type import JewelryRequestType
from GeneratorsPattern.i18n import get_message
from 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.py
from GeneratorsPattern.service.registry import register_handler
from GeneratorsPattern.common.request_type import JewelryRequestType
from GeneratorsPattern.i18n import get_message
from 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.py
from GeneratorsPattern.service.registry import register_handler
from GeneratorsPattern.common.request_type import JewelryRequestType
from GeneratorsPattern.i18n import get_message
from 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.py
from typing import Generator,List
from GeneratorsPattern.model.dto import JewelryRequest, JewelryResponse
from GeneratorsPattern.service.registry import HANDLER_REGISTRY
from GeneratorsPattern.i18n import get_message
 
 
class 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.py
 
from typing import List
from GeneratorsPattern.model.dto import JewelryRequest
from GeneratorsPattern.service.generator import JewelryRequestGenerator
 
class 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)

调用:

python 复制代码
# 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.py
 
import GeneratorsPattern.service.handlers
from GeneratorsPattern.api.request_router import JewelryRequestAPI
from GeneratorsPattern.model.dto import JewelryRequest
from GeneratorsPattern.common.request_type import JewelryRequestType
from GeneratorsPattern.i18n import get_message
from GeneratorsPattern.common.language import Language
 
class 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}")

输出:

相关推荐
没有不重的名么1 小时前
spyder使用教程
开发语言·python
阿正的梦工坊1 小时前
【Rust】06-函数、控制流与模块组织
开发语言·算法·rust
Wonderful U1 小时前
Python+Django实战|线上问卷与投票调研系统:自定义题型、问卷发布、链接分享、答卷收集、数据可视化、报表导出
python·信息可视化·django
狗凯之家源码网1 小时前
永夜大圣 H5 棋牌大厅源码效果实测与品质解析
java·开发语言
爱装代码的小瓶子1 小时前
muduo库 --socket的封装
服务器·开发语言·php
凡人叶枫1 小时前
Effective C++ 条款13:以对象管理资源(RAII)
java·linux·开发语言·c++·嵌入式开发
Cloud_Shy6181 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 36 - 39)
开发语言·人工智能·笔记·python
阿正的梦工坊1 小时前
【Rust】11-Rust 所有权模型的编译期推理机制
开发语言·算法·rust
zmzb01031 小时前
Python课后习题训练记录Day128
开发语言·python