Z
ZHANK
编程在线教程Python 教程设计模式 Python 实现
面向对象

设计模式 Python 实现

单例/工厂/观察者模式、依赖注入、组合优于继承

设计模式 Python 实现

Python 的动态特性让经典设计模式的实现更简洁——单例用模块、工厂用函数、观察者用信号。

学完本章你将: 掌握单例/工厂/观察者、依赖注入、组合优于继承。


单例模式

python
# 方式 1:模块级变量(最简单)
# config.py
_settings = {}
def get_config():
    return _settings

# 方式 2:__new__ 控制
class Singleton:
    _instance = None
    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

工厂模式

python
def create_notifier(channel: str):
    """工厂函数——根据参数返回不同实现"""
    if channel == "email":
        return EmailNotifier()
    elif channel == "sms":
        return SMSNotifier()
    elif channel == "slack":
        return SlackNotifier()
    raise ValueError(f"Unknown channel: {channel}")

依赖注入

python
class UserService:
    def __init__(self, db, email_sender):
        self.db = db
        self.email_sender = email_sender  # 依赖注入——不在内部创建

    def register(self, user):
        self.db.save(user)
        self.email_sender.send_welcome(user.email)

组合优于继承

python
# ❌ 继承——带来紧耦合
class Robot(Animal, Machine):  # 多重继承的 MRO 噩梦
    pass

# ✅ 组合——灵活
class Robot:
    def __init__(self):
        self.mover = Legs()
        self.speaker = Speaker()
        self.brain = CPU()

    def move(self):
        self.mover.walk()