设计模式 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()