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

推荐订阅源

罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
The Cloudflare Blog
WordPress大学
WordPress大学
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
博客园 - 三生石上(FineUI控件)
V
V2EX
有赞技术团队
有赞技术团队
V
Visual Studio Blog
小众软件
小众软件
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
量子位
T
Tailwind CSS Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Palo Alto Networks Blog
Cisco Talos Blog
Cisco Talos Blog
I
Intezer
Project Zero
Project Zero
A
Arctic Wolf
P
Privacy International News Feed
V
Vulnerabilities – Threatpost
L
Lohrmann on Cybersecurity
S
Securelist
C
Cybersecurity and Infrastructure Security Agency CISA
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Tor Project blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
S
Security @ Cisco Blogs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
TaoSecurity Blog
TaoSecurity Blog
L
LINUX DO - 热门话题
G
GRAHAM CLULEY
Help Net Security
Help Net Security
N
News | PayPal Newsroom
W
WeLiveSecurity
G
Google Developers Blog
Microsoft Security Blog
Microsoft Security Blog
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
C
Check Point Blog

博客园 - ®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: Simple Factory Pattern python: Abstract Factory Pattern 区域化 代码 python: Null Object Pattern python: Builder Pattern python: Adapter Pattern
python: Factory Method Pattern
®Geovin Du Dream Park™ · 2026-03-11 · via 博客园 - ®Geovin Du Dream Park™

珠宝品牌下有「戒指工厂」「项链工厂」「手镯工厂」,每个工厂只负责生产对应类型的珠宝,且每种珠宝仍保留核心属性(材质、克重、宝石)和统一业务流程(设计→制作→质检→定价)。我们通过工厂方法模式实现「专属工厂生产专属珠宝 + 全流程业务执行」的完整逻辑。

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


# --------------------------- 第一步:定义珠宝产品层(属性+业务流程) ---------------------------
class Jewelry:
    """
    珠宝抽象产品基类:定义通用属性和业务流程接口
    """
    def __init__(self, material: str, weight: float, gemstone: str = None):
        """

        :param material:
        :param weight:
        :param gemstone:
        """
        # 通用实体属性
        self.material = material  # 材质(黄金/铂金/18K金)
        self.weight = weight      # 克重(g)
        self.gemstone = gemstone  # 镶嵌宝石(钻石/红宝石/无)
        self.price = 0.0          # 最终定价

    # 业务流程接口(强制子类实现)
    def design(self):
        """

        :return:
        """
        raise NotImplementedError("子类必须实现设计方法")

    def produce(self):
        """

        :return:
        """
        raise NotImplementedError("子类必须实现制作方法")

    def quality_check(self):
        """
        通用质检逻辑(所有珠宝共用)
        :return:
        """
        qualified = self.weight > 0 and self.material in ["黄金", "铂金", "18K金"]
        print(f"【{self.__class__.__name__}】质检:{'合格' if qualified else '不合格'}")
        return qualified

    def pricing(self):
        """

        :return:
        """
        raise NotImplementedError("子类必须实现定价方法")

    def complete_process(self):
        """
        封装完整业务流程:设计→制作→质检→定价
        :return:
        """
        print("\n===== 开始珠宝生产流程 =====")
        self.design()
        self.produce()
        if self.quality_check():
            self.pricing()
            print(f"【{self.__class__.__name__}】最终定价:{self.price:.2f} 元")
        else:
            print(f"【{self.__class__.__name__}】质检不合格,流程终止")
        print("===== 珠宝生产流程结束 =====\n")


# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:工厂方法模式(Factory Method 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 23:02 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : Bracelet.py
from Model.FactoryMethod.Jewelry import Jewelry

# --------------------------- 第一步:定义珠宝产品层(属性+业务流程) ---------------------------
# 具体珠宝产品:手镯(新增专属属性+实现业务接口)
class Bracelet(Jewelry):
    """
    手镯:专属属性-内径,实现个性化业务逻辑
    """
    def __init__(self, material: str, weight: float, gemstone: str = None, inner_diameter: float = 5.8):
        """

        :param material:
        :param weight:
        :param gemstone:
        :param inner_diameter:
        """
        super().__init__(material, weight, gemstone)#super () 是用来解决多重继承问题的
        self.inner_diameter = inner_diameter  # 手镯专属属性:内径(cm)

    def design(self):
        """

        :return:
        """
        print(f"手镯设计:内径{self.inner_diameter}cm,{self.material}材质,{'雕花镶嵌'+self.gemstone if self.gemstone else '素圈'}")

    def produce(self):
        """

        :return:
        """
        print(f"手镯制作:锻打成型→{self.material}磨砂→{'宝石雕花镶嵌' if self.gemstone else '素圈打磨'}")

    def pricing(self):
        """

        :return:
        """
        base = self.weight * 600
        gem_add = 6000 if self.gemstone == "钻石" else 3500 if self.gemstone == "红宝石" else 0
        self.price = base + gem_add


# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:工厂方法模式(Factory Method 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 23:01 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : Necklace.py
from Model.FactoryMethod.Jewelry import Jewelry
# --------------------------- 第一步:定义珠宝产品层(属性+业务流程) ---------------------------
# 具体珠宝产品:项链(新增专属属性+实现业务接口)
class Necklace(Jewelry):
    """
    项链:专属属性-链长,实现个性化业务逻辑"
    """
    def __init__(self, material: str, weight: float, gemstone: str = None, chain_length: float = 45):
        """

        :param material:
        :param weight:
        :param gemstone:
        :param chain_length:
        """
        super().__init__(material, weight, gemstone)#super () 是用来解决多重继承问题的
        self.chain_length = chain_length  # 项链专属属性:链长(cm)

    def design(self):
        """

        :return:
        """
        print(f"项链设计:链长{self.chain_length}cm,{self.material}材质,{'吊坠镶嵌'+self.gemstone if self.gemstone else '无吊坠'}")

    def produce(self):
        """

        :return:
        """
        print(f"项链制作:编织链身→{self.material}焊接→{'吊坠宝石镶嵌' if self.gemstone else '素链成型'}")

    def pricing(self):
        """

        :return:
        """
        base = self.weight * 600
        gem_add = 8000 if self.gemstone == "钻石" else 4000 if self.gemstone == "红宝石" else 0
        self.price = base + gem_add


# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:工厂方法模式(Factory Method 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 23:00 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : Ring.py
from Model.FactoryMethod.Jewelry import Jewelry

# --------------------------- 第一步:定义珠宝产品层(属性+业务流程) ---------------------------
# 具体珠宝产品:戒指(新增专属属性+实现业务接口)
class Ring(Jewelry):
    """
    戒指:专属属性-圈口,实现个性化业务逻辑
    """
    def __init__(self, material: str, weight: float, gemstone: str = None, ring_size: int = 18):
        """

        :param material:
        :param weight:
        :param gemstone:
        :param ring_size:
        """
        super().__init__(material, weight, gemstone) #super () 是用来解决多重继承问题的
        self.ring_size = ring_size  # 戒指专属属性:圈口

    def design(self):
        """

        :return:
        """
        print(f"戒指设计:圈口{self.ring_size}号,{self.material}材质,{'镶嵌'+self.gemstone if self.gemstone else '无镶嵌'}")

    def produce(self):
        """

        :return:
        """
        print(f"戒指制作:打磨圈口→{self.material}抛光→{'宝石镶嵌' if self.gemstone else '素圈成型'}")

    def pricing(self):
        """
        定价规则:基础金价(600元/g)*克重 + 宝石溢价
        :return:
        """
        base = self.weight * 600
        gem_add = 5000 if self.gemstone == "钻石" else 3000 if self.gemstone == "红宝石" else 0
        self.price = base + gem_add
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:工厂方法模式(Factory Method 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 23:03 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : JewelryFactory.py
from Model.FactoryMethod.Jewelry import Jewelry


# --------------------------- 第二步:定义工厂层(抽象工厂+具体工厂) ---------------------------
class JewelryFactory:
    """
    珠宝抽象工厂基类:定义创建珠宝的接口(工厂方法)
    """
    def create_jewelry(self, **kwargs) -> Jewelry:
        """
        工厂方法:子类必须实现,返回具体珠宝对象
        :param kwargs:
        :return:
        """
        raise NotImplementedError("子类必须实现创建珠宝的方法")


# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:工厂方法模式(Factory Method 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 23:05 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : BraceletFactory.py
from Interface.FactoryMethod.JewelryFactory import JewelryFactory
from Model.FactoryMethod.Bracelet import Bracelet

# --------------------------- 第二步:定义工厂层(抽象工厂+具体工厂) ---------------------------

class BraceletFactory(JewelryFactory):
    """
    具体工厂:手镯工厂(仅生产手镯)
    """
    def create_jewelry(self, **kwargs) -> Bracelet:
        """

        :param kwargs:
        :return:
        """
        if "inner_diameter" not in kwargs:
            kwargs["inner_diameter"] = 5.8  # 默认内径
        return Bracelet(** kwargs)

# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:工厂方法模式(Factory Method 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 23:05 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : NecklaceFactory.py
from Interface.FactoryMethod.JewelryFactory import JewelryFactory
from Model.FactoryMethod.Necklace import Necklace
# --------------------------- 第二步:定义工厂层(抽象工厂+具体工厂) ---------------------------

class NecklaceFactory(JewelryFactory):
    """
    具体工厂:项链工厂(仅生产项链)
    """
    def create_jewelry(self, **kwargs) -> Necklace:
        """

        :param kwargs:
        :return:
        """
        if "chain_length" not in kwargs:
            kwargs["chain_length"] = 45  # 默认链长
        return Necklace(** kwargs)




# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:工厂方法模式(Factory Method 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 23:03 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : RingFactory.py
from Interface.FactoryMethod.JewelryFactory import JewelryFactory
from Model.FactoryMethod.Ring import Ring

# --------------------------- 第二步:定义工厂层(抽象工厂+具体工厂) ---------------------------

class RingFactory(JewelryFactory):
    """
    具体工厂:戒指工厂(仅生产戒指)
    """
    def create_jewelry(self, **kwargs) -> Ring:
        """

        :param kwargs:
        :return:
        """
        # 校验戒指专属属性,保证创建的合法性
        if "ring_size" not in kwargs:
            kwargs["ring_size"] = 18  # 默认圈口
        return Ring(** kwargs)
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:工厂方法模式(Factory Method 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 23:07 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : FactoryMethodBll.py
from Interface.FactoryMethod.RingFactory import RingFactory
from Interface.FactoryMethod.BraceletFactory import BraceletFactory
from Interface.FactoryMethod.NecklaceFactory import NecklaceFactory


# --------------------------- 第三步:业务调用示例 ---------------------------

class FactoryMethodBll(object):
    """

    """
    def demo(self):
        """


        :return:
        """
        # 1. 生产钻石戒指:调用戒指工厂
        ring_factory = RingFactory()
        diamond_ring = ring_factory.create_jewelry(
            material="铂金",
            weight=5.2,
            gemstone="钻石",
            ring_size=19
        )
        diamond_ring.complete_process()

        # 2. 生产红宝石项链:调用项链工厂
        necklace_factory = NecklaceFactory()
        ruby_necklace = necklace_factory.create_jewelry(
            material="18K金",
            weight=8.5,
            gemstone="红宝石",
            chain_length=42
        )
        ruby_necklace.complete_process()

        # 3. 生产素圈黄金手镯:调用手镯工厂
        bracelet_factory = BraceletFactory()
        gold_bracelet = bracelet_factory.create_jewelry(
            material="黄金",
            weight=20.8,
            inner_diameter=6.0
        )
        gold_bracelet.complete_process()

 调用:

# 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(涂聚文)