Python面向对象设计:SOLID原则详解

一、SOLID原则概述

1.1 为什么需要设计原则?

软件需求变化
代码腐化
维护成本增加
开发效率下降
系统重构

SOLID原则是打破这一恶性循环的关键,由Robert C. Martin提出,包含五大核心原则:

原则 简称 核心思想
单一职责原则 SRP 一个类只有一个改变的理由
开闭原则 OCP 对扩展开放,对修改关闭
里氏替换原则 LSP 子类必须能替换父类
接口隔离原则 ISP 多个专用接口优于单一通用接口
依赖倒置原则 DIP 依赖抽象而非具体实现

二、单一职责原则(SRP)

2.1 原则定义

一个类应该只有一个引起变化的原因

2.2 违反SRP的示例

class User:
    def __init__(self, name, email):
        self.name = name
        self.email = email
    
    def save(self):
        # 数据库保存逻辑
        print(f"保存用户 {
     self.name} 到数据库")
    
    def send_email(self, message):
        # 邮件发送逻辑
        print(f"给 {
     self.email} 发送邮件: {
     message}")
    
    def validate_email(self):
        # 邮箱验证逻辑
        return "@" in self.email

# 问题:用户类负责用户管理、邮件发送、验证多种功能

2.3 遵循SRP的重构

class User:
    def __init__(self, name, email):
        self.name = name
        self.email = email

class UserRepository:
    def save(self, user):
        print(f"保存用户 {
     user.name} 到数据库")

class EmailService:
    def send(self, user, message):
        print(f"给 {
     user.email} 发送邮件: {
     message}")

class Validator:
    def validate_email(self, email):
        return "@" in email

# 使用
user = User("Alice", "[email protected]")
repo = UserRepository()
repo.save(user)

email_service = EmailService()
email_service.send(user, "欢迎注册")

三、开闭原则(OCP)

3.1 原则定义

软件实体(类、模块、函数等)应该对扩展开放,对修改关闭

3.2 违反OCP的示例

class PaymentProcessor:
    def process_payment(self, payment_type, amount):
        if payment_type == "credit":
            # 信用卡支付处理
            print(f"信用卡支付: ${
     amount}")
        elif payment_type == "paypal":
            # PayPal支付处理
            

你可能感兴趣的:(python,#,面向对象编程,python,面向对象设计,SOLID原则,Python编程,软件架构,设计模式,代码质量)