SOLID 原则

作者: 黄花菜先生 | 来源:发表于2025-08-25 15:49 被阅读0次

SOLID 原则,这是面向对象设计中非常核心的一套指导原则,用来写 可维护、可扩展、可复用 的代码。每个字母对应一个原则:


S — Single Responsibility Principle(单一职责原则)

  • 含义:一个类只负责一项职责(功能)。
  • 目的:降低类的复杂度,提高可维护性。
  • 示例
// ❌ 不符合单一职责:既负责用户数据管理,又负责打印日志
@interface UserManager : NSObject
- (void)saveUser:(User *)user;
- (void)logUserSave:(User *)user;
@end

// ✅ 符合单一职责:分开两个类
@interface UserManager : NSObject
- (void)saveUser:(User *)user;
@end

@interface Logger : NSObject
- (void)log:(NSString *)message;
@end

O — Open/Closed Principle(开闭原则)

  • 含义:软件实体(类、模块、函数等)对扩展开放,对修改封闭
  • 目的:新增功能不破坏已有代码,降低回归风险。
  • 示例
// ❌ 修改原有类增加支付方式
@interface PaymentManager : NSObject
- (void)payWithAmount:(double)amount type:(EVPaymentType)type;
@end

// ✅ 使用策略模式扩展支付方式,不修改 PaymentManager
@interface EVPaymentManager : NSObject
- (void)payWithAmount:(double)amount type:(id<EVPaymentStrategy>)strategy;
@end

L — Liskov Substitution Principle(里氏替换原则)

  • 含义:子类对象必须可以替换父类对象,并且功能不出错。
  • 目的:保证继承体系的可靠性和可替换性。
  • 示例
@interface Bird : NSObject
- (void)fly;
@end

@interface Duck : Bird @end
@interface Ostrich : Bird @end

// ❌ 错误:Ostrich 不会飞,如果调用 fly 会出问题

正确做法:将 fly 提取到可飞行接口,Ostrich 不实现 Flyable


I — Interface Segregation Principle(接口隔离原则)

  • 含义:不强迫类依赖它不需要的接口。
  • 目的:接口粒度小,避免“胖接口”。
  • 示例
@protocol Worker <NSObject>
- (void)work;
- (void)eat;
@end

// ❌ 不符合接口隔离:机器人也必须实现 eat
@interface Robot : NSObject <Worker> @end

// ✅ 分接口
@protocol Workable <NSObject>
- (void)work;
@end
@protocol Eatable <NSObject>
- (void)eat;
@end

D — Dependency Inversion Principle(依赖倒置原则)

  • 含义

    1. 高层模块不应该依赖低层模块,二者都应该依赖抽象。
    2. 抽象不应该依赖细节,细节应该依赖抽象。
  • 目的:降低模块间耦合,增强灵活性。

  • 示例

// ❌ 高层模块直接依赖低层模块
@interface UserService : NSObject
@property (nonatomic, strong) UserManager *manager;
@end

// ✅ 高层模块依赖抽象接口
@interface UserService : NSObject
@property (nonatomic, strong) id<UserStorable> storage;
@end

总结

  • S:一个类只做一件事
  • O:扩展功能时,尽量不改已有代码
  • L:子类能替换父类且行为正确
  • I:接口要小,类只依赖需要的方法
  • D:高层模块依赖抽象,不依赖具体实现

SOLID 原则是面向对象设计的基石,和你之前讲的 组合模式 / 策略模式 / 工厂模式 很契合。例如:

  • 组合模式体现 依赖倒置
  • 策略模式体现 开闭原则
  • 工厂模式帮助 单一职责 + 依赖倒置

相关文章

  • JAVA设计模式原则

    一、Solid原则 介绍设计模式中的SOLID原则,分别是单一原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置...

  • SOLID 原则

    SOLID 作为开篇,这篇文章主要来介绍SOLID原则。 SOLID 原则提供了五条指导思想,如果我们遵从...

  • 01-设计模式原则

    面向对象的设计原则 面向对象的设计原则也被称为SOLID。SOLID原则包括单一职责原则、开闭原则、里氏替换原则、...

  • 一分钟搞懂SOLID原则

    SOLID原则是面向对象设计的一个基本原则,通过这篇短文我们可以很快了解SOLID原则的核心思想。原文:SOLID...

  • 设计原则

    1. SOLID原则 通常所说的SOLID 原则并非单纯的 1 个原则,而是由 5 个设计原则组成的,它们分别是:...

  • 怎么判断某个类符合单一职责原则

    经典的设计原则,其中包括,SOLID、KISS、YAGNI、DRY、LOD 等。 其中的SOLID 原则,实际上,...

  • 什么是接口隔离原则?

    SOLID 原则中的单一职责原则、开闭原则和里式替换原则,第四个原则-接口隔离原则。它对应 SOLID 中的英文字...

  • SOLID原则

    S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Pricipl...

  • SOLID原则

    iOS 面向对象编程遵循的五个原则,即 SOLID原则: 1、单一功能原则:对象功能要单一,不要在一个对象里添加很...

  • SOLID原则

    本文所有代码为golang S - 单一职责原则 Single Responsibility Principle,...

网友评论

    本文标题:SOLID 原则

    本文链接:https://www.haomeiwen.com/subject/hxvrajtx.html