首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >python: Registry Pattern

python: Registry Pattern

作者头像
geovindu
发布2026-06-18 16:59:42
发布2026-06-18 16:59:42
350
举报

项目结构:

代码语言:javascript
复制
# 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()
代码语言:javascript
复制
# 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
代码语言:javascript
复制
# 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 "权限:质检-鉴定审核"
代码语言:javascript
复制
# 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()
代码语言:javascript
复制
# 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)}

调用:

代码语言:javascript
复制
# 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✅ 企业级架构运行成功!")

输出:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档