Python 中的常用设计模式工具与库

在前面的几篇中,我们已经从理论上理解了设计模式、分类和重构思想。本篇将视角拉回到 Python 本身,看看在实际编写设计模式时,哪些内置工具和标准库最常被用到

掌握这些工具,能让你用更少的代码实现更清晰的设计模式。


一、abc:抽象类的基石

abc(Abstract Base Class)是 Python 实现设计模式时最重要的基础工具之一

典型用途

  • 策略模式
  • 工厂模式
  • 模板方法模式

示例:

from abc import ABC, abstractmethod

class Payment(ABC):
    @abstractmethod
    def pay(self, amount):
        pass

作用:

  • 强制子类实现指定方法
  • 明确“接口契约”
  • 提前暴露设计错误

二、typing:让设计更清晰

typing 并不是设计模式本身,但它极大提升了模式的可读性与可维护性

1. 类型注解

def process(payment: Payment) -> None:
    payment.pay(100)

阅读代码时,可以快速理解“这里依赖的是抽象,而不是具体实现”。


2. Protocol:轻量级接口

from typing import Protocol

class Payable(Protocol):
    def pay(self, amount: int) -> None: ...

特点:

  • 不需要继承
  • 只关心“行为是否存在”
  • 非常适合策略模式、适配器模式

三、functools:函数级设计模式利器

1. functools.wraps

实现装饰器模式时必不可少:

from functools import wraps

def log(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        print("before")
        return func(*args, **kwargs)
    return wrapper

保持原函数的名称、文档等元信息。


2. functools.lru_cache

典型的代理 + 缓存模式实现:

from functools import lru_cache

@lru_cache(maxsize=128)
def get_user(user_id):
    print("query database")
    return {"id": user_id}

无需显式写代理类,也能实现缓存代理。


四、enum:状态与策略的好搭档







次阅读

扫描下方二维码,关注公众号:程序进阶之路,实时获取更多优质文章推送。


扫码关注

评论