python: Registry Pattern

项目结构:

image

 

珠宝行业实战示例
完整实现的 8 大模块(全部用注册模式)
珠宝品类注册(黄金 / 钻石 / 铂金 / 珍珠 / 翡翠)
珠宝工艺注册(抛光 / 镶嵌 / 雕刻 / 电镀)
优惠券注册(满减 / 折扣 / 免工费 / 新品)
订单流程注册(下单 / 质检 / 发货 / 售后)
材质等级注册(18K/24K/PT950/PT999)
鉴定证书注册(NGTC/GIC/IGI)
支付方式注册(微信 / 支付宝 / 银行卡 / 分期)
员工权限注册(店长 / 销售 / 库管 / 质检)

多品类
多材质
多证书
多营销
多支付
多权限
多流程


珠宝(5 个)
工艺(4 个)
优惠券(4 个)
材质(4 个)
证书(3 个)
支付(4 个)
角色(4 个)
订单流程(4 个)

# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Registry 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/5/6 21:42 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : base_registry.py

from typing import Dict, Type, Any


class BaseRegistry:
    """
    企业级注册器基类:所有模块继承
    """
    _registry: Dict[str, Type[Any]] = {}

    @classmethod
    def register(cls, name: str):
        """
        装饰器注册:@XXX.register("name")
        :param name:
        :return:
        """
        def decorator(target_cls: Type[Any]) -> Type[Any]:
            if name in cls._registry:
                raise ValueError(f"注册项重复:{name}")
            cls._registry[name] = target_cls
            return target_cls
        return decorator

    @classmethod
    def get(cls, name: str) -> Type[Any]:
        """
        根据名称获取实例类
        :param name:
        :return:
        """
        if name not in cls._registry:
            raise KeyError(f"未注册的项:{name},可选:{list(cls._registry.keys())}")
        return cls._registry[name]

    @classmethod
    def list_items(cls) -> list:
        """
        获取所有注册项名称
        :return:
        """
        return list(cls._registry.keys())

    @classmethod
    def clear(cls):
        """
        清空注册(测试用)
        :return:
        """
        cls._registry.clear()

  

# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Registry 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/5/6 21:42 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : jewelry.py
from dataclasses import dataclass

@dataclass
class JewelryItem:
    """
    珠宝实体:单一职责,仅存储数据
    """
    name: str
    category: str
    material: str
    craft: str
    certificate: str
    price: float

  

# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Registry 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/5/6 21:43 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : category.py

from RegistryPattern.common.base_registry import BaseRegistry

class JewelryCategoryRegistry(BaseRegistry):
    """

    """

    _registry = {}

@JewelryCategoryRegistry.register("黄金")
class Gold:
    """

    """
    def info(self):
        """

        :return:
        """
        return "品类:黄金 - 保值硬通货"

@JewelryCategoryRegistry.register("钻石")
class Diamond:
    """

    """
    def info(self):
        """

        :return:
        """
        return "品类:钻石 - 永恒璀璨"

@JewelryCategoryRegistry.register("铂金")
class Platinum:
    """

    """

    def info(self):
        """

        :return:
        """
        return "品类:铂金 - 稀有纯白"

@JewelryCategoryRegistry.register("珍珠")
class Pearl:
    """

    """
    def info(self):
        """

        :return:
        """

        return "品类:珍珠 - 优雅温润"

@JewelryCategoryRegistry.register("翡翠")
class Jadeite:
    """

    """
    def info(self):
        """

        :return:
        """
        return "品类:翡翠 - 国玉瑰宝"



# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Registry 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/5/6 21:43 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : craft.py

from RegistryPattern.common.base_registry import BaseRegistry

class CraftRegistry(BaseRegistry):
    """

    """
    _registry = {}

@CraftRegistry.register("抛光")
class Polishing:
    """

    """
    def work(self):
        """

        :return:
        """
        return "工艺:抛光 - 提升光泽"

@CraftRegistry.register("镶嵌")
class Inlay:
    """

    """
    def work(self):
        """

        :return:
        """
        return "工艺:镶嵌 - 固定主石"

@CraftRegistry.register("雕刻")
class Carving:
    """

    """
    def work(self):
        """

        :return:
        """
        return "工艺:雕刻 - 定制花纹"

@CraftRegistry.register("电镀")
class Plating:
    """

    """
    def work(self):
        """

        :return:
        """
        return "工艺:电镀 - 抗氧化"


# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Registry 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/5/6 21:44 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : coupon.py

from RegistryPattern.common.base_registry import BaseRegistry

class CouponRegistry(BaseRegistry):
    """

    """
    _registry = {}

@CouponRegistry.register("满减")
class FullCut:
    """

    """
    def calc(self, amount):
        """

        :param amount:
        :return:
        """
        return f"满减后:{max(0, amount-500)}"

@CouponRegistry.register("折扣")
class Discount:
    """

    """
    def calc(self, amount):
        """

        :param amount:
        :return:
        """
        return f"折扣后:{amount*0.85:.2f}"

@CouponRegistry.register("免工费")
class FreeLabor:
    """

    """
    def calc(self, fee):
        """

        :param fee:
        :return:
        """

        return "工费全免"

@CouponRegistry.register("新品")
class NewProduct:
    """

    """
    def calc(self, amount):
        """

        :param amount:
        :return:
        """
        return f"新品价:{amount-200}"


# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Registry 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/5/6 21:44 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : order_process.py

from RegistryPattern.common.base_registry import BaseRegistry

class OrderProcessRegistry(BaseRegistry):
    """

    """
    _registry = {}

@OrderProcessRegistry.register("下单")
class CreateOrder:
    """

    """
    def run(self):
        """

        :return:
        """
        return "流程:生成订单"

@OrderProcessRegistry.register("质检")
class QualityCheck:
    """

    """
    def run(self):
        """

        :return:
        """
        return "流程:商品质检"

@OrderProcessRegistry.register("发货")
class Delivery:
    """

    """
    def run(self):
        """

        :return:
        """
        return "流程:打包发货"

@OrderProcessRegistry.register("售后")
class AfterSale:
    """

    """
    def run(self):
        """

        :return:
        """

        return "流程:售后维护"


# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Registry 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/5/6 21:44 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : material.py

from RegistryPattern.common.base_registry import BaseRegistry

class MaterialRegistry(BaseRegistry):
    """

    """
    _registry = {}

@MaterialRegistry.register("18K金")
class Gold18K:
    """

    """
    def detail(self):
        """

        :return:
        """
        return "材质:18K金(75%)"

@MaterialRegistry.register("24K金")
class Gold24K:
    """

    """
    def detail(self):
        """

        :return:
        """
        return "材质:24K金(99.9%)"

@MaterialRegistry.register("PT950")
class PT950:
    """

    """
    def detail(self):
        """

        :return:
        """

        return "材质:PT950铂金"

@MaterialRegistry.register("PT999")
class PT999:
    """

    """
    def detail(self):
        """

        :return:
        """
        return "材质:PT999高纯度铂金"


# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Registry 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/5/6 21:44 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : certificate.py

from RegistryPattern.common.base_registry import BaseRegistry

class CertificateRegistry(BaseRegistry):
    """

    """
    _registry = {}

@CertificateRegistry.register("NGTC")
class NGTC:
    """

    """
    def auth(self):
        """

        :return:
        """
        return "证书:国检NGTC(权威)"

@CertificateRegistry.register("GIC")
class GIC:
    """

    """

    def auth(self):
        """

        :return:
        """

        return "证书:地质大学GIC"

@CertificateRegistry.register("IGI")
class IGI:
    """

    """
    def auth(self):
        """

        :return:
        """
        return "证书:国际IGI"


# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Registry 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/5/6 21:44 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : payment.py

from RegistryPattern.common.base_registry import BaseRegistry

class PaymentRegistry(BaseRegistry):
    """

    """

    _registry = {}

@PaymentRegistry.register("微信")
class WechatPay:
    """

    """
    def pay(self, amount):
        """

        :param amount:
        :return:
        """
        return f"微信支付 {amount} 成功"

@PaymentRegistry.register("支付宝")
class Alipay:
    """

    """
    def pay(self, amount):
        """

        :param amount:
        :return:
        """
        return f"支付宝支付 {amount} 成功"

@PaymentRegistry.register("银行卡")
class BankCard:
    """

    """
    def pay(self, amount):
        """

        :param amount:
        :return:
        """

        return f"银行卡支付 {amount} 成功"

@PaymentRegistry.register("分期")
class Installment:
    """

    """
    def pay(self, amount):
        """

        :param amount:
        :return:
        """

        return f"分期支付 {amount} 成功"


# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Registry 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/5/6 21:45 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : role.py

from RegistryPattern.common.base_registry import BaseRegistry

class RoleRegistry(BaseRegistry):
    """

    """
    _registry = {}

@RoleRegistry.register("店长")
class Manager:
    """

    """
    def perm(self):
        """

        :return:
        """

        return "权限:店长-全店管理"

@RoleRegistry.register("销售")
class Sales:
    """

    """
    def perm(self):
        """

        :return:
        """
        return "权限:销售-开单售卖"

@RoleRegistry.register("库管")
class Keeper:
    """

    """
    def perm(self):
        """

        :return:
        """
        return "权限:库管-库存管理"

@RoleRegistry.register("质检")
class Inspector:
    """

    """

    def perm(self):
        """

        :return:
        """

        return "权限:质检-鉴定审核"

  

# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Registry 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/5/6 21:43 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : jewelry_service.py

from RegistryPattern.registry.category import JewelryCategoryRegistry
from RegistryPattern.registry.craft import CraftRegistry
from RegistryPattern.registry.coupon import CouponRegistry
from RegistryPattern.registry.material import MaterialRegistry
from RegistryPattern.registry.certificate import CertificateRegistry
from RegistryPattern.registry.payment import PaymentRegistry
from RegistryPattern.registry.role import RoleRegistry
from RegistryPattern.registry.order_process import OrderProcessRegistry


class JewelryService:
    """
    业务编排层:只负责组装逻辑,不存储数据
    """

    @staticmethod
    def show_all_categories():
        """

        :return:
        """
        return [JewelryCategoryRegistry.get(n)().info() for n in JewelryCategoryRegistry.list_items()]

    @staticmethod
    def calculate_price(coupon_type: str, amount: float):
        """

        :param coupon_type:
        :param amount:
        :return:
        """
        return CouponRegistry.get(coupon_type)().calc(amount)

    @staticmethod
    def do_payment(pay_type: str, amount: float):
        """

        :param pay_type:
        :param amount:
        :return:
        """
        return PaymentRegistry.get(pay_type)().pay(amount)

    @staticmethod
    def run_process(process: str):
        """

        :param process:
        :return:
        """
        return OrderProcessRegistry.get(process)().run()

  

# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Registry 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/5/6 21:43 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : system_api.py
from RegistryPattern.service.jewelry_service import JewelryService

class SystemAPI:
    """
    接口层:对外提供稳定入口
    """

    @staticmethod
    def get_jewelry_category_list():
        """

        :return:
        """
        return {"code": 200, "data": JewelryService.show_all_categories()}

    @staticmethod
    def calculate_coupon(coupon: str, amount: float):
        """

        :param coupon:
        :param amount:
        :return:
        """
        return {"code": 200, "result": JewelryService.calculate_price(coupon, amount)}

    @staticmethod
    def pay_order(pay_type: str, amount: float):
        """

        :param pay_type:
        :param amount:
        :return:
        """
        return {"code": 200, "msg": JewelryService.do_payment(pay_type, amount)}

    @staticmethod
    def execute_process(process: str):
        """

        :param process:
        :return:
        """
        return {"code": 200, "step": JewelryService.run_process(process)}

  

调用:

# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Registry 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/5/6 21:57 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : RegistryBll.py
'''

RegistryPattern/
├── common/                  # 通用基础模块
│   └── base_registry.py     # 注册模式基类
├── registry/                # 8大注册中心
│   ├── category.py          # 珠宝品类
│   ├── craft.py             # 工艺
│   ├── coupon.py            # 优惠券
│   ├── order_process.py     # 订单流程
│   ├── material.py          # 材质等级
│   ├── certificate.py       # 鉴定证书
│   ├── payment.py           # 支付方式
│   └── role.py              # 员工权限
├── entity/                  # 业务实体
│   └── jewelry.py           # 珠宝商品模型
├── service/                 # 业务服务
│   └── jewelry_service.py   # 核心业务编排
├── api/                     # 接口层
│   └── system_api.py        # 对外API
├── main.py                  # 启动入口
└── README.md                # 说明文档

'''

from RegistryPattern.api.system_api import SystemAPI

class RegistryBll(object):
    """
     注册模式
    """
    def demo(self):
        """
        注册模式
        :return:
        """
        print("=" * 60)
        print("企业级珠宝系统 - 注册模式 8大模块全运行")
        print("=" * 60)

        print("\n【1. 珠宝品类】")
        print(SystemAPI.get_jewelry_category_list())

        print("\n【2. 优惠计算】")
        print(SystemAPI.calculate_coupon("满减", 3000))

        print("\n【3. 支付】")
        print(SystemAPI.pay_order("微信", 5288))

        print("\n【4. 订单流程】")
        print(SystemAPI.execute_process("下单"))

        print("\n✅ 企业级架构运行成功!")

  

输出:

image

 

posted @ 2026-05-06 22:26  ®Geovin Du Dream Park™  阅读(7)  评论(0)    收藏  举报