Python高级应用系列(九):设计模式在Python中的实现——从原理到代码
标签:Python | 设计模式 | SOLID原则 | 面向对象 | 软件架构
字数:约 4500 字
建议阅读时间:14 分钟
前言
设计模式是软件工程的经典沉淀,最早由 GoF(Gang of Four)在《设计模式》一书中系统提出。然而,很多 Python 开发者认为"设计模式是 Java 的东西",这是一个误解。Python 的动态特性、 duck typing 和一等函数让很多传统模式得以简化,同时也催生了一些 Python 特有的模式。
本文选取 10 个在 Python 中最常用、最有价值的设计模式,用代码讲解其实现方式和适用场景。
一、单例模式:全局唯一实例
1.1 模块级单例(最 Pythonic)
Python 模块天然是单例——导入一次后全局缓存:
# config.py class Config: def __init__(self): self.debug = True self.host = "localhost" config = Config() # 模块加载时创建,全局唯一使用时直接import config,同一进程内任何地方引用都是同一个实例。
1.2 装饰器单例
def singleton(cls): instances = {} def get_instance(*args, **kwargs): if cls not in instances: instances[cls] = cls(*args, **kwargs) return instances[cls] return get_instance @singleton class Database: def __init__(self, url): self.url = url db1 = Database("mysql://localhost") db2 = Database("mysql://remote") print(db1 is db2) # True —— db2 被忽略,返回同一个实例1.3 元类单例
class SingletonMeta(type): _instances = {} def __call__(cls, *args, **kwargs): if cls not in cls._instances: cls._instances[cls] = super().__call__(*args, **kwargs) return cls._instances[cls] class AppConfig(metaclass=SingletonMeta): def __init__(self): self.version = "1.0.0" config1 = AppConfig() config2 = AppConfig() print(config1 is config2) # True二、工厂模式:对象创建的封装
2.1 简单工厂
class Dog: def speak(self): return "汪汪!" class Cat: def speak(self): return "喵~" class Bird: def speak(self): return "啾啾!" def animal_factory(kind: str): """简单工厂:根据字符串创建对象""" mapping = {"dog": Dog, "cat": Cat, "bird": Bird} cls = mapping.get(kind) if not cls: raise ValueError(f"不支持的动物类型: {kind}") return cls() print(animal_factory("dog").speak()) # 汪汪!2.2 工厂方法模式
父类定义抽象方法,子类决定具体实现:
from abc import ABC, abstractmethod class Animal(ABC): @abstractmethod def speak(self): pass def move(self): return f"{self.__class__.__name__} 在移动" class LandAnimal(Animal): def speak(self): return "陆地动物叫声" class WaterAnimal(Animal): def speak(self): return "水中动物叫声" class AnimalFactory(ABC): @abstractmethod def create(self) -> Animal: