python: Functional Options Pattern

项目结构:

介绍了一种基于Python的函数式选项模式(Functional Options Pattern)在珠宝行业全业务流程配置管理中的应用。该模式通过定义可组合的配置函数(JewelryOption)来灵活定制业务参数,主要包含以下实现:

  1. 核心配置类JewelryBusinessConfig使用dataclass定义,包含原料采购、设计、生产、质检等12个业务模块的默认参数。

  2. 按业务模块划分的选项函数(如enable_vip_service()、set_material_standard()),每个函数返回一个修改配置的闭包。

  3. 工厂方法create_jewelry_business()支持通过可变参数组合多个选项来构建不同场景的配置实例。

  4. 预定义了三种典型配置场景:标准门店(全默认)、高端定制品牌(全套高级选项)、批发工厂(精简非核心功能)。

这种模式通过函数组合实现了业务配置的可插拔式管理,相比传统配置方式具有更好的可读性、可维护性和扩展性,特别适合珠宝行业这类多业务线、多运营模式的场景。

python 复制代码
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options 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/7/4 19:55
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : biz_config.py
from dataclasses import dataclass
from typing import Optional
 
 
@dataclass(frozen=False)
class JewelryBusinessConfig:
    """
    珠宝全业务流程统一配置实体,承载所有模块默认参数
    """
    # 原料采购核验
    material_check: bool = True
    material_quality_standard: str = "GIA"
    supplier_audit: bool = True
 
    # 设计制图
    design_software: str = "JewelCAD"
    design_review: bool = True
    custom_design: bool = False
 
    # 加工生产
    production_line: str = "标准生产线"
    craft_level: str = "普通工艺"
    quality_control_point: int = 3
 
    # 质检
    final_inspection: bool = True
    inspection_standard: str = "国标"
    rework_allowed: bool = True
 
    # 包装
    luxury_packaging: bool = False
    gift_box_type: str = "基础礼盒"
    anti_counterfeit: bool = True
 
    # 物流
    express_company: str = "顺丰"
    insured_value: bool = True
    international_shipping: bool = False
 
    # 财务
    auto_invoice: bool = True
    tax_rate: float = 0.13
    payment_terms: str = "款到发货"
 
    # 营销推广
    online_marketing: bool = True
    offline_store: bool = True
    advertising_budget: Optional[int] = None
 
    # 门店业务
    order_management: bool = True
    after_sales_service: bool = True
    vip_service: bool = False
 
    # 人事行政
    staff_training: bool = True
    attendance_system: bool = True
    office_supplies: bool = True
 
    # IT系统
    cloud_server: bool = True
    data_backup: bool = True
    system_security: bool = True
 
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options 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/7/4 20:01
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : business_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
 
JewelryOption = Callable[[JewelryBusinessConfig], None]
 
 
def enable_vip_service() -> JewelryOption:
    def wrapper(cfg: JewelryBusinessConfig):
        cfg.vip_service = True
    return wrapper
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options 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/7/4 20:04
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : design_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
 
JewelryOption = Callable[[JewelryBusinessConfig], None]
 
 
def use_custom_design() -> JewelryOption:
    def wrapper(cfg: JewelryBusinessConfig):
        cfg.custom_design = True
    return wrapper
 
 
def set_design_software(software: str) -> JewelryOption:
    def wrapper(cfg: JewelryBusinessConfig):
        cfg.design_software = software
    return wrapper
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options 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/7/4 20:00
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : finance_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
 
JewelryOption = Callable[[JewelryBusinessConfig], None]
 
 
def set_tax_rate(rate: float) -> JewelryOption:
    def wrapper(cfg: JewelryBusinessConfig):
        cfg.tax_rate = rate
    return wrapper
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options 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/7/4 20:02
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : hr_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
 
JewelryOption = Callable[[JewelryBusinessConfig], None]
 
 
def disable_staff_training() -> JewelryOption:
    def wrapper(cfg: JewelryBusinessConfig):
        cfg.staff_training = False
    return wrapper
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options 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/7/4 19:59
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : inspect_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
 
JewelryOption = Callable[[JewelryBusinessConfig], None]
 
 
def set_inspection_standard(standard: str) -> JewelryOption:
    def wrapper(cfg: JewelryBusinessConfig):
        cfg.inspection_standard = standard
    return wrapper
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options 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/7/4 20:03
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : it_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
 
JewelryOption = Callable[[JewelryBusinessConfig], None]
 
 
def disable_cloud_server() -> JewelryOption:
    def wrapper(cfg: JewelryBusinessConfig):
        cfg.cloud_server = False
    return wrapper
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options 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/7/4 20:05
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : logistics_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
 
JewelryOption = Callable[[JewelryBusinessConfig], None]
 
 
def enable_international_shipping() -> JewelryOption:
    def wrapper(cfg: JewelryBusinessConfig):
        cfg.international_shipping = True
    return wrapper
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options 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/7/4 20:01
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : marketing_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
 
JewelryOption = Callable[[JewelryBusinessConfig], None]
 
 
def set_advertising_budget(budget: int) -> JewelryOption:
    def wrapper(cfg: JewelryBusinessConfig):
        cfg.advertising_budget = budget
    return wrapper
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options 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/7/4 19:57
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : material_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
 
# 函数式选项类型定义
JewelryOption = Callable[[JewelryBusinessConfig], None]
 
 
def disable_material_check() -> JewelryOption:
    def wrapper(cfg: JewelryBusinessConfig):
        cfg.material_check = False
    return wrapper
 
 
def set_material_standard(standard: str) -> JewelryOption:
    def wrapper(cfg: JewelryBusinessConfig):
        cfg.material_quality_standard = standard
    return wrapper
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options 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/7/4 19:59
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : package_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
 
JewelryOption = Callable[[JewelryBusinessConfig], None]
 
 
def enable_luxury_packaging() -> JewelryOption:
    def wrapper(cfg: JewelryBusinessConfig):
        cfg.luxury_packaging = True
        cfg.gift_box_type = "奢华礼盒"
    return wrapper
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options 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/7/4 19:58
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : produce_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
 
JewelryOption = Callable[[JewelryBusinessConfig], None]
 
 
def set_production_line(line: str) -> JewelryOption:
    def wrapper(cfg: JewelryBusinessConfig):
        cfg.production_line = line
    return wrapper
 
 
def upgrade_craft() -> JewelryOption:
    def wrapper(cfg: JewelryBusinessConfig):
        cfg.craft_level = "高级工艺"
        cfg.quality_control_point = 5
    return wrapper
  
python 复制代码
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options 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/7/4 20:06
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : biz_service.py
from FunctionalOptionsPattern.factory import create_jewelry_business
from FunctionalOptionsPattern.options import (
    disable_material_check,
    set_material_standard,
    use_custom_design,
    set_design_software,
    set_production_line,
    upgrade_craft,
    set_inspection_standard,
    enable_luxury_packaging,
    enable_international_shipping,
    set_tax_rate,
    set_advertising_budget,
    enable_vip_service,
    disable_staff_training,
    disable_cloud_server,
)
from FunctionalOptionsPattern.config import JewelryBusinessConfig
 
 
def get_standard_store_config() -> JewelryBusinessConfig:
    """
    标准线下珠宝门店:完全使用默认配置
    :return:
    """
    return create_jewelry_business()
 
 
def get_luxury_custom_brand_config() -> JewelryBusinessConfig:
    """
    高端定制珠宝品牌:全套高端业务选项组合
    :return:
    """
    cfg = create_jewelry_business(
        set_material_standard("GIA+国检双标准"),
        use_custom_design(),
        set_design_software("Rhino+Matrix"),
        set_production_line("高端定制生产线"),
        upgrade_craft(),
        set_inspection_standard("奢侈品级"),
        enable_luxury_packaging(),
        enable_international_shipping(),
        enable_vip_service(),
        set_advertising_budget(1000000),
    )
    return cfg
 
 
def get_wholesale_factory_config() -> JewelryBusinessConfig:
    """
    珠宝批发工厂:精简非核心业务配置
    :return:
    """
    cfg = create_jewelry_business(
        disable_material_check(),
        disable_staff_training(),
        disable_cloud_server(),
        set_tax_rate(0.09),
    )
    return cfg
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options 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/7/4 20:06
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : biz_factory.py
from typing import Tuple
from FunctionalOptionsPattern.config import JewelryBusinessConfig
from FunctionalOptionsPattern.options.material_options import JewelryOption
 
 
def create_jewelry_business(*options: JewelryOption) -> JewelryBusinessConfig:
    """
    企业级Functional Options 构造工厂
    1. 初始化全局默认配置
    2. 批量应用自定义Option覆盖默认值
    3. 返回最终业务配置实例
    """
    # 初始化标准默认配置
    config = JewelryBusinessConfig()
 
    # 遍历所有函数式选项,依次修改配置
    opt: JewelryOption
    for opt in options:
        opt(config)
 
    return config
 

  

调用:

python 复制代码
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options 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/7/4 20:08
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : FunctionalOptionsBll.py
 
from FunctionalOptionsPattern.service import (
    get_standard_store_config,
    get_luxury_custom_brand_config,
    get_wholesale_factory_config,
)
 
class FunctionalOptionsBll(object):
    """
 
    """
    def demo(self):
        """
 
        :return:
        """
        print("=" * 70)
        print("【场景1:标准珠宝门店 - 默认配置】")
        standard_cfg = get_standard_store_config()
        print(f"设计软件:{standard_cfg.design_software}")
        print(f"质检标准:{standard_cfg.inspection_standard}")
        print(f"基础税率:{standard_cfg.tax_rate}")
 
        print("\n" + "=" * 70)
        print("【场景2:高端定制珠宝品牌】")
        luxury_cfg = get_luxury_custom_brand_config()
        print(f"定制设计开启:{luxury_cfg.custom_design}")
        print(f"工艺等级:{luxury_cfg.craft_level}")
        print(f"礼盒类型:{luxury_cfg.gift_box_type}")
        print(f"VIP服务:{luxury_cfg.vip_service}")
        print(f"年度营销预算:{luxury_cfg.advertising_budget:,}")
 
        print("\n" + "=" * 70)
        print("【场景3:批发工厂精简配置】")
        factory_cfg = get_wholesale_factory_config()
        print(f"原料核验关闭:{factory_cfg.material_check}")
        print(f"本地部署服务器:{factory_cfg.cloud_server}")
        print(f"工厂增值税率:{factory_cfg.tax_rate}")
  

输出:

相关推荐
wuyk5551 小时前
24. C 语言模块化:不是拆几个.c 文件那么简单
c语言·开发语言·stm32·单片机
tryCbest2 小时前
Python 文件操作
服务器·python
凯瑟琳.奥古斯特2 小时前
K次取反最大化数组和解法(力扣1005)
开发语言·c++·算法·leetcode·职场和发展
涛声依旧-底层原理研究所2 小时前
Agent 长任务可靠性设计:实现暂停、恢复、续跑与崩溃重启的完整方案
人工智能·python·系统架构
AC赳赳老秦2 小时前
防火墙规则批量配置实战:OpenClaw 自动生成模板、批量下发与合规性校验全解析
java·开发语言·人工智能·python·github·php·openclaw
小小编程路3 小时前
如何优化while循环的性能?
python
☆cwlulu3 小时前
调试排查工具介绍(gdb、strace、Valgrind等)
开发语言·c++·嵌入式硬件·ubuntu
卷无止境3 小时前
C++ 存储类说明符(Storage Class Specifier)大横评
c++·后端
用户019027581613 小时前
量化数据的 batch 接口有多好用?从 1 只到 500 只,批量拉数据的正确姿势
后端