惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
GRAHAM CLULEY
T
Tenable Blog
Know Your Adversary
Know Your Adversary
C
CXSECURITY Database RSS Feed - CXSecurity.com
P
Privacy International News Feed
S
Security Affairs
NISL@THU
NISL@THU
O
OpenAI News
Attack and Defense Labs
Attack and Defense Labs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Hacker News: Ask HN
Hacker News: Ask HN
Webroot Blog
Webroot Blog
Schneier on Security
Schneier on Security
S
SegmentFault 最新的问题
S
Schneier on Security
G
Google Developers Blog
V
V2EX
C
Check Point Blog
U
Unit 42
Google DeepMind News
Google DeepMind News
T
Threatpost
阮一峰的网络日志
阮一峰的网络日志
T
The Exploit Database - CXSecurity.com
Recent Announcements
Recent Announcements
M
MIT News - Artificial intelligence
S
Secure Thoughts
博客园 - 司徒正美
Recorded Future
Recorded Future
P
Proofpoint News Feed
Spread Privacy
Spread Privacy
K
Kaspersky official blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
AI
AI
博客园 - 聂微东
N
News and Events Feed by Topic
SecWiki News
SecWiki News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
Vulnerabilities – Threatpost
P
Palo Alto Networks Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Engineering at Meta
Engineering at Meta
Recent Commits to openclaw:main
Recent Commits to openclaw:main
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
The Hacker News
The Hacker News
The Last Watchdog
The Last Watchdog
Project Zero
Project Zero
W
WeLiveSecurity
博客园 - Franky

博客园 - ®Geovin Du Dream Park™

go: Functional Options Pattern go:Timing Functions Pattern python: Timing Functions Pattern go: Steady-State Pattern python: Steady-State Pattern go: Handshaking Pattern python: Handshaking Pattern go: Fail-Fast Pattern python: Fail-Fast Pattern I go: Deadline Pattern python: Deadline Pattern go: Circuit-Breaker Pattern python: Circuit-Breaker Pattern go: Bulkheads Pattern python: Bulkheads Pattern go: Push & Pull Pattern python: Push & Pull Pattern python: Publish/Subscribe Pattern II go: Publish/Subscribe Pattern python: Publish/Subscribe Pattern go: Futures & Promises Pattern python: Futures & Promises Pattern go: Worker Pool Pattern go:Pipeline Pattern python: Worker Pool Pattern python: Pipeline Pattern go: Fan-Out Pattern python: Fan-Out Pattern go: Fan-In Pattern python: Fan-In Pattern Fan-In go: Producer Consumer  Pattern python: Producer Consumer Pattern go: Parallelism Pattern python: Parallelism Pattern go: Reactor Pattern python: Reactor Pattern go: Generators Pattern python: speech to text offline python: Generators Pattern go: Coroutines Pattern python:Coroutines Pattern go: Broadcast Pattern python: Broadcast Pattern python: Bounded Parallelism Pattern go: Bounded Parallelism Pattern python: N-Barrier Pattern go: N-Barrier Pattern python: Semaphore Pattern go: Semaphore Pattern python: Read-Write Lock Pattern go: Read-Write Lock Pattern python: Monitor Pattern go: Monitor Pattern python: Mutex Pattern go: Lock/Mutex Pattern Python: Condition Variable Pattern go:Condition Variable Pattern python: Registry Pattern python: Interpreter Pattern go: Interpreter Pattern go: Registry Pattern go: Memento Pattern go: Command Pattern go: State Pattern go:Template Method Pattern go: Strategy Pattern go: Visitor Pattern go: Observer Pattern go: Mediator Pattern go: Iterator Pattern go: Chain of Responsibility Pattern go: Proxy Pattern go:Decorator Pattern go: Facade Pattern go: Flyweight Pattern go: Composite Pattern go: Singleton Pattern go: Prototype Pattern go: Bridge Pattern go: Adapter Pattern go: Builder Pattern 密码进行加盐哈希 using CSharp,Python,Go,Java go: Abstract Factory Pattern go: Model,Interface,DAL ,Factory,BLL using mysql go: Simple Factory Pattern go: Factory Method Pattern go: goLang 在Windows环境搭建Go语言开发环境 CSharp: Parallel Extensions cpp: class python: 蝴蝶跟随鼠标 javascript: 中国历史人物热力分布图using echart javascript: 中国历史人物热力图 python: 初养龙虾微信纯文字自动回复using workBuddy python: object 入门 python: Factory Method Pattern python: Simple Factory Pattern python: Abstract Factory Pattern 区域化 代码 python: Null Object Pattern python: Adapter Pattern
python: Builder Pattern
®Geovin Du Dream Park™ · 2026-03-10 · via 博客园 - ®Geovin Du Dream Park™

对于珠宝行业来说,一件成品珠宝(比如钻戒、项链)的制作包含多个固定步骤(选材质、选宝石、镶嵌工艺、刻字、质检),但每个步骤可以有不同的配置(比如材质可选黄金 / 铂金、宝石可选钻石 / 红宝石),非常适合用建造者模式实现。

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

# ===================== 1. 产品类:珠宝实体 =====================
class Jewelry:
    """
    珠宝实体类,包含核心属性和业务方法
    """
    def __init__(self):
        """

        """
        self.material = None  # 戒托材质
        self.gemstone = None  # 主石(类型+参数)
        self.inlay_craft = None  # 镶嵌工艺
        self.engraving = None  # 刻字内容
        self.quality_check = False  # 质检状态
        self.price = 0.0  # 最终价格

    def calculate_price(self):
        """
        业务逻辑:根据属性计算价格(简化版)
        :return:
        """
        # 基础材质价格
        material_price = {"黄金": 500, "铂金": 600, "18K金": 450}[self.material]
        # 宝石价格(钻石按克拉,莫桑石固定价)
        gem_type, gem_carat = self.gemstone.split("-")
        gem_price = 1000 * float(gem_carat) if gem_type == "钻石" else 200 * float(gem_carat)
        # 工艺加价
        craft_price = {"爪镶": 100, "包镶": 150, "槽镶": 200}[self.inlay_craft]
        # 刻字加价(可选)
        engraving_price = 50 if self.engraving else 0
        # 总价
        self.price = material_price + gem_price + craft_price + engraving_price

    def __str__(self)->str:
        """

        :return:
        """
        return (f"定制钻戒详情:\n"
                f"  戒托材质:{self.material}\n"
                f"  主石:{self.gemstone}\n"
                f"  镶嵌工艺:{self.inlay_craft}\n"
                f"  刻字:{self.engraving if self.engraving else '无'}\n"
                f"  质检状态:{'合格' if self.quality_check else '不合格'}\n"
                f"  最终价格:{self.price}元")
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# 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/3/8 12:40 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : JewelryBuilder.py
from abc import ABC, abstractmethod
from Model.Builder.Jewelry import Jewelry


# ===================== 2. 抽象建造者:定义构建步骤 =====================
class JewelryBuilder(ABC):
    """
    珠宝建造者抽象类,定义定制珠宝的固定步骤
    """
    def __init__(self):
        """

        """
        self.jewelry = Jewelry()

    @abstractmethod
    def build_material(self):
        """
        步骤1:选择戒托材质
        :return:
        """
        pass

    @abstractmethod
    def build_gemstone(self):
        """
        步骤2:选择主石及参数
        :return:
        """
        pass

    @abstractmethod
    def build_inlay_craft(self):
        """
        步骤3:选择镶嵌工艺
        :return:
        """
        pass

    @abstractmethod
    def build_engraving(self, content=None):
        """
        步骤4:个性化刻字(可选)
        :param content:
        :return:
        """
        pass

    @abstractmethod
    def build_quality_check(self):
        """
        步骤5:成品质检
        :return:
        """
        pass

    def get_jewelry(self):
        """
        返回最终构建的珠宝对象
        :return:
        """
        # 构建完成后自动计算价格(业务流程)
        self.jewelry.calculate_price()
        return self.jewelry
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# 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/3/8 12:43 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : DiamondRingBuilder.py
from Interface.Builder.JewelryBuilder import JewelryBuilder

# ===================== 3. 具体建造者:实现钻戒的构建 =====================
class DiamondRingBuilder(JewelryBuilder):
    """
    钻戒建造者,实现具体的构建步骤"
    """""
    def build_material(self, material="铂金"):
        """
        指定戒托材质,默认铂金
        :param material:
        :return:
        """
        self.jewelry.material = material

    def build_gemstone(self, gem_type="钻石", carat=0.5):
        """
        指定主石类型和克拉数,默认0.5克拉钻石
        :param gem_type:
        :param carat:
        :return:
        """
        self.jewelry.gemstone = f"{gem_type}-{carat}"

    def build_inlay_craft(self, craft="爪镶"):
        """
        指定镶嵌工艺,默认爪镶
        :param craft:
        :return:
        """
        self.jewelry.inlay_craft = craft

    def build_engraving(self, content=None):
        """
        刻字,无内容则不刻
        :param content:
        :return:
        """
        self.jewelry.engraving = content

    def build_quality_check(self):
        """
        质检:简化为直接合格(实际业务可加检测逻辑)
        :return:
        """
        self.jewelry.quality_check = True
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# 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/3/8 12:45 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : JewelryDirector.py

# ===================== 4. 指挥者:控制构建流程 =====================
class JewelryDirector(object):
    """
    珠宝定制指挥者,负责按固定流程执行构建步骤
    """
    def __init__(self, builder):
        self.builder = builder

    def construct_jewelry(self, material, gem_type, carat, craft, engraving=None):
        """
        执行完整的定制流程
        :param material:
        :param gem_type:
        :param carat:
        :param craft:
        :param engraving:
        :return:
        """
        # 严格按业务流程执行步骤
        self.builder.build_material(material)
        self.builder.build_gemstone(gem_type, carat)
        self.builder.build_inlay_craft(craft)
        self.builder.build_engraving(engraving)
        self.builder.build_quality_check()
        return self.builder.get_jewelry()
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:生成器模式 Builder 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/3/8 12:47 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : BuilderBll.py
from BuilderPattern.JewelryDirector import JewelryDirector
from Interface.Builder.DiamondRingBuilder import DiamondRingBuilder

# ===================== 5. 客户端使用示例 =====================

class BuilderBll(object):
    """
    生成器模式 Builder Pattern
    """
    def demo(self):
        """
        生成器模式 Builder Pattern
        :return:
        """
        # 1. 创建钻戒建造者
        ring_builder = DiamondRingBuilder()
        # 2. 创建指挥者(把控定制流程)
        director = JewelryDirector(ring_builder)

        # 3. 定制第一枚钻戒:铂金+1克拉钻石+包镶+刻字"LOVE"
        ring1 = director.construct_jewelry(
            material="铂金",
            gem_type="钻石",
            carat=1.0,
            craft="包镶",
            engraving="LOVE"
        )
        print("=== 第一枚定制钻戒 ===")
        print(ring1)

        print("\n" + "-" * 50 + "\n")

        # 4. 定制第二枚钻戒:18K金+0.8克拉莫桑石+槽镶+无刻字
        ring2 = director.construct_jewelry(
            material="18K金",
            gem_type="莫桑石",
            carat=0.8,
            craft="槽镶"
        )
        print("=== 第二枚定制钻戒 ===")
        print(ring2)

调用:

# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述: 设计模式 Design Patterns
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 3.11
# OS        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  oracle 21c Neo4j
# Datetime  : 2026/2/18 20:58
# User      : geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : main.py
# explain   : 学习

import Controller.CheckPatterns


def select_design_pattern() -> tuple[int, Controller.CheckPatterns.DesignPattern | None]:
    """
    返回 (序列号, 选中的枚举对象),退出则返回 (0, None)
    :return:
    """
    print("\n=== 方式3:用户选择展示 ===")
    print("可选设计模式(输入0或q退出):")
    for idx, pattern in enumerate(Controller.CheckPatterns.DesignPattern, 1):
        print(f"{idx}. {pattern._name_to_cn(pattern.name)}({pattern.name})")
    print("0. 退出")

    while True:
        user_input = input("\n请输入序号选择要展示的设计模式(输入0/q退出):").strip()
        if user_input in ("0", "q", "Q"):
            print("👋 退出选择流程")
            return (0, None)

        try:
            choice = int(user_input)
            if 1 <= choice <= len(Controller.CheckPatterns.DesignPattern):
                selected_pattern = list(Controller.CheckPatterns.DesignPattern)[choice - 1]
                print(f"✅ 你选择了序号:{choice}(对应{selected_pattern._name_to_cn(selected_pattern.name)})")
                return (choice, selected_pattern)  # 返回(序列号, 枚举对象)
            else:
                print(f"❌ 输入无效!请输入1-{len(Controller.CheckPatterns.DesignPattern)}之间的数字,或0/q退出")
        except ValueError:
            print("❌ 输入无效!请输入数字序号,或0/q退出")

def ask_continue() -> bool:
    """
    询问用户是否继续选择,返回True(继续)/False(退出)
    """
    while True:
        user_choice = input("\n是否继续选择其他设计模式?(y/n):").strip().lower()
        if user_choice == "y":
            return True
        elif user_choice == "n":
            print("👋 感谢使用,程序结束!")
            return False
        else:
            print("❌ 输入无效!请输入 y(继续)或 n(退出)")


if __name__ == '__main__':

    # 方式1:用户输入选择展示(交互版)
    '''
    print("\n=== 方式1:用户选择展示 ===")
    print("可选设计模式:")
    for idx, pattern in enumerate( bll.CheckPatterns.DesignPattern, 1):
        print(f"{idx}. {pattern._name_to_cn(pattern.name)}({pattern.name})")

    try:
        choice = int(input("\n请输入序号选择要展示的设计模式:"))
        selected_pattern = list( bll.CheckPatterns.DesignPattern)[choice - 1]
        selected_pattern.show_example()
    except (ValueError, IndexError):
        print("❌ 输入无效,请输入正确的序号!")
    '''
    # 2

    print("🎉 设计模式示例展示程序")
    while True:
        # 1. 选择设计模式
        selected_num, selected_pattern = select_design_pattern()

        # 2. 判断是否直接退出(输入0/q)
        if selected_num == 0:
            print("👋 程序结束!")
            break

        # 3. 执行选中的示例
        selected_pattern.show_example()
        print(f"\n📌 本次选择的序列号是:{selected_num}")

        # 4. 询问是否继续
        if not ask_continue():
            break  # 用户选择不继续,终止循环

    print('hi,welcome geovindu.')

输出:

image

哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)