# 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/4 21:47 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : CheckPatterns.py 创建型模式 Creational Patterns 抽象工厂Abstract Factory 生成器Builder 工厂方法Factory Method 原型Prototype 单例Singleton 结构型模式 Structural Patterns 适配器Adapter 桥接Bridge 组合Composite 装饰Decorator 外观Facade 享元Flyweight 代理Proxy 行为模式 Behavioral Patterns 责任链Chain of Responsibility 迭代器Iterator 备忘录Memento 状态State 模板方法Template Method 命令Command 中介者Mediator 观察者Observer 策略Strategy 访问者Visitor from enum import Enum, auto # 导入枚举相关模块 import bll.MementoBll import bll.CommandBll import bll.StateBll import bll.TemplateMethodBll import bll.VisitorBll import bll.StrategyBll import bll.ObserveBll import bll.MediatorBll import bll.IteratorBll import bll.ChainofResponsibilityBll import bll.ProxyBll # 枚举类定义管理所有设计模式示例 class DesignPattern(Enum): 设计模式枚举 - 每个枚举成员对应一个设计模式的示例函数 Memento auto() 备忘录模式 Command auto() # 命令模式 State auto() # 状态模式 TemplateMethodauto() # 模板方法模式 Visitorauto() # 访问者模式 Strategyauto() # 策略模式 Observeauto() # 观察者模式 Mediatorauto() # 中介者模式 Iteratorauto() # 迭代器模式 ChainofResponsibilityauto() # 责任链模式 Proxyauto() # 代理模式 Flyweightauto() 享元模式 def show_example(self): 枚举成员方法根据当前枚举值执行对应的示例函数 :return: pattern_handlers { DesignPattern.Memento:lambda:(bll.MementoBll.MementoBll().demo()), DesignPattern.Command:lambda:(bll.CommandBll.CommandBll().demo()), DesignPattern.State:lambda:(bll.StateBll.StateBll().demo()), DesignPattern.TemplateMethod:lambda:(bll.TemplateMethodBll.TemplateMethodBll().demo()), DesignPattern.Visitor:lambda:(bll.VisitorBll.VisitorBll().demo()), DesignPattern.Strategy:lambda:(bll.StrategyBll.StrategyBll().demo()), DesignPattern.Observe:lambda:(bll.ObserveBll.ObserveBll().demo()), DesignPattern.Mediator:lambda:(bll.MediatorBll.MediatorBll().demo()), DesignPattern.Iterator:lambda:(bll.IteratorBll.IteratorBll().demo()), DesignPattern.ChainofResponsibility:lambda:(bll.ChainofResponsibilityBll.ChainofResponsibilityBll().dudemo()), DesignPattern.Proxy:lambda:(bll.ProxyBll.ProxyBll().demo()), } # 获取当前枚举对应的示例函数并执行 handler pattern_handlers.get(self) if handler: print(f\n 展示【{self.name}{self._name_to_cn(self.name)}】示例 ) handler() else: print(f❌ 暂未实现{self.name}的示例) staticmethod def _name_to_cn(name: str) - str: 枚举名称转中文提升可读性 :param name: :return: cn_map { Memento: 备忘录模式, Command: 单例模式, State: 命令模式, TemplateMethod: 模板方法模式, Visitor: 模板方法模式, Strategy: 策略模式, Observe: 观察者模式, Mediator: 中介者模式, Iterator: 迭代器模式, ChainofResponsibility: 责任链模式 , Proxy: 代理模式, Flyweight: 享元模式, } return cn_map.get(name, name)调用# 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 bll.CheckPatterns def select_design_pattern() - tuple[int, bll.CheckPatterns.DesignPattern | None]: 返回 (序列号, 选中的枚举对象)退出则返回 (0, None) :return: print(\n 方式3用户选择展示 ) print(可选设计模式输入0或q退出) for idx, pattern in enumerate(bll.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(bll.CheckPatterns.DesignPattern): selected_pattern list(bll.CheckPatterns.DesignPattern)[choice - 1] print(f✅ 你选择了序号{choice}对应{selected_pattern._name_to_cn(selected_pattern.name)}) return (choice, selected_pattern) # 返回(序列号, 枚举对象) else: print(f❌ 输入无效请输入1-{len(bll.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.)输出