news 2026/2/3 16:10:16

Python 设计模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 设计模式

Python 设计模式概述

设计模式(Design Patterns)是软件设计中常见的、可复用的问题解决方案,由 GoF(Gang of Four,四人组)在1994年的经典书籍《设计模式:可复用面向对象软件的基础》中总结出23种模式。这些模式分为三大类:创建型(Creational)、结构型(Structural)和行为型(Behavioral)。

在 Python 中,由于语言的动态特性(如鸭子类型、装饰器、内置迭代器等),有些模式实现更简单,甚至某些模式(如迭代器、装饰器)已被语言内置。但掌握这些模式有助于写出更优雅、可维护的代码,尤其在大型项目中。

三大类设计模式列表
类别模式名称(中文/英文)主要用途
创建型(5种)单例模式 (Singleton)
工厂方法 (Factory Method)
抽象工厂 (Abstract Factory)
生成器 (Builder)
原型 (Prototype)
处理对象创建方式,隐藏创建细节,提高灵活性。
结构型(7种)适配器 (Adapter)
桥接 (Bridge)
组合 (Composite)
装饰器 (Decorator)
外观 (Facade)
享元 (Flyweight)
代理 (Proxy)
处理类或对象的组合,简化结构,提高复用。
行为型(11种)责任链 (Chain of Responsibility)
命令 (Command)
解释器 (Interpreter)
迭代器 (Iterator)
中介者 (Mediator)
备忘录 (Memento)
观察者 (Observer)
状态 (State)
策略 (Strategy)
模板方法 (Template Method)
访问者 (Visitor)
处理对象间的交互和责任分配,提高解耦。
常见模式 Python 示例

下面挑选几个经典模式,提供简洁的 Python 实现示例(基于 Python 3+)。

  1. 单例模式 (Singleton)
    确保一个类只有一个实例,常用于数据库连接、日志器等。

    classSingleton:_instance=Nonedef__new__(cls,*args,**kwargs):ifcls._instanceisNone:cls._instance=super().__new__(cls)returncls._instance# 使用s1=Singleton()s2=Singleton()print(s1iss2)# True
  2. 工厂方法 (Factory Method)
    定义创建接口,让子类决定实例化哪个类。

    fromabcimportABC,abstractmethodclassProduct(ABC):@abstractmethoddefoperation(self):passclassConcreteProductA(Product):defoperation(self):return"Product A"classConcreteProductB(Product):defoperation(self):return"Product B"classCreator(ABC):@abstractmethoddeffactory_method(self):passdefsome_operation(self):product=self.factory_method()returnf"Creator:{product.operation()}"classConcreteCreatorA(Creator):deffactory_method(self):returnConcreteProductA()# 使用creator=ConcreteCreatorA()print(creator.some_operation())# Creator: Product A
  3. 观察者模式 (Observer)
    一对多依赖,当主体变化时通知观察者(常用于事件系统)。

    classSubject:def__init__(self):self._observers=[]defattach(self,observer):self._observers.append(observer)defnotify(self):forobserverinself._observers:observer.update(self)classObserver:defupdate(self,subject):print(f"Observer notified:{subject}")# 使用subject=Subject()observer=Observer()subject.attach(observer)subject.notify()# Observer notified: <__main__.Subject object at ...>
  4. 装饰器模式 (Decorator)
    动态添加职责(Python 有内置 @decorator 语法)。

    defdecorator(func):defwrapper(*args,**kwargs):print("Before call")result=func(*args,**kwargs)print("After call")returnresultreturnwrapper@decoratordefgreet(name):returnf"Hello,{name}!"print(greet("World"))# Before/After + Hello, World!
注意事项
  • Python 的动态性使一些模式(如策略模式)可以用简单函数实现,而非类。
  • 不要滥用模式:遵循 KISS(Keep It Simple, Stupid)和 YAGNI(You Aren’t Gonna Need It)原则。
  • 推荐资源:
    • Refactoring Guru(中文版):https://refactoringguru.cn/design-patterns/python (详细代码示例)。
    • GitHub 项目:faif/python-patterns(经典实现集合)。
    • 书籍:《Mastering Python Design Patterns》或 GoF 原书结合 Python 示例。

如果需要某个具体模式的详细解释、更多代码或应用场景,请告诉我!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/30 15:52:38

Python 桥接模式

Python 中的桥接模式&#xff08;Bridge Pattern&#xff09; 桥接模式是一种结构型设计模式&#xff0c;其核心目的是&#xff1a; 将抽象部分&#xff08;Abstraction&#xff09;与实现部分&#xff08;Implementation&#xff09;分离&#xff0c;使它们可以独立变化。 形…

作者头像 李华
网站建设 2026/1/30 8:39:53

Charticulator图表定制完整指南:零代码打造专业数据可视化

Charticulator图表定制完整指南&#xff1a;零代码打造专业数据可视化 【免费下载链接】charticulator Interactive Layout-Aware Construction of Bespoke Charts 项目地址: https://gitcode.com/gh_mirrors/ch/charticulator 还在为制作个性化图表而烦恼吗&#xff1f…

作者头像 李华
网站建设 2026/1/29 20:19:20

探索FreeRedis:重新定义.NET环境下的Redis客户端体验

探索FreeRedis&#xff1a;重新定义.NET环境下的Redis客户端体验 【免费下载链接】FreeRedis 项目地址: https://gitcode.com/gh_mirrors/fr/FreeRedis 你是否曾为Redis客户端的性能瓶颈而困扰&#xff1f;在资源受限的环境中&#xff0c;传统的Redis客户端往往显得过于…

作者头像 李华
网站建设 2026/2/3 14:37:26

南信大本科论文排版快速上手终极方案:告别格式烦恼的智能模板

还在为毕业论文格式调整而熬夜奋战吗&#xff1f;南京信息工程大学本科生毕业论文LaTeX模板正是为你量身打造的排版利器。这款专为南信大学子设计的智能工具&#xff0c;能够自动处理所有繁琐的格式要求&#xff0c;让你专注内容创作&#xff0c;轻松搞定万字论文。 【免费下载…

作者头像 李华
网站建设 2026/1/28 16:59:33

【Open-AutoGLM远程调试终极指南】:掌握高效排查技巧,提升AI开发效率

第一章&#xff1a;Open-AutoGLM远程调试概述Open-AutoGLM 是一个面向自动化生成式语言模型任务的开源框架&#xff0c;支持本地与远程协同调试机制&#xff0c;极大提升了开发效率与部署灵活性。通过内置的远程调试接口&#xff0c;开发者可在分布式环境中实时监控模型推理流程…

作者头像 李华