news 2026/4/23 9:12:47

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/4/24 5:37:46

Python 外观模式

Python 中的外观模式&#xff08;Facade Pattern&#xff09; 外观模式是一种结构型设计模式&#xff0c;其核心目的是&#xff1a; 为一个复杂子系统提供一个简单的、统一的接口&#xff0c;隐藏子系统的复杂性&#xff0c;让客户端更容易使用。 形象比喻&#xff1a;就像一…

作者头像 李华
网站建设 2026/4/17 21:30:43

PSMNet立体匹配网络:从理论到实践的完整指南

PSMNet立体匹配网络&#xff1a;从理论到实践的完整指南 【免费下载链接】PSMNet Pyramid Stereo Matching Network (CVPR2018) 项目地址: https://gitcode.com/gh_mirrors/ps/PSMNet PSMNet&#xff08;Pyramid Stereo Matching Network&#xff09;是由Jia-Ren Chang和…

作者头像 李华
网站建设 2026/4/22 10:45:27

Open-AutoGLM技术内幕曝光:90%开发者不知道的7个隐藏功能

第一章&#xff1a;Open-AutoGLM详细介绍Open-AutoGLM 是一个开源的自动化通用语言模型&#xff08;GLM&#xff09;推理与部署框架&#xff0c;旨在降低大模型在实际业务场景中的应用门槛。该框架集成了模型压缩、自动提示工程、上下文学习优化以及多后端推理支持等核心功能&a…

作者头像 李华
网站建设 2026/4/21 13:12:58

前端Token无感刷新:让用户像在游乐园畅玩一样流畅

❤ 写在前面 如果觉得对你有帮助的话&#xff0c;点个小❤❤ 吧&#xff0c;你的支持是对我最大的鼓励~ 个人独立开发wx小程序&#xff0c;感谢支持&#xff01; &#x1f3aa; 从游乐园门票说起 想象一下&#xff0c;你去游乐园玩&#xff0c;门票&#xff08;Token&#xf…

作者头像 李华