SOLID 原则

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 原则是面向对象设计的基石,和你之前讲的 组合模式 / 策略模式 / 工厂模式 很契合。例如:

  • 组合模式体现 依赖倒置
  • 策略模式体现 开闭原则
  • 工厂模式帮助 单一职责 + 依赖倒置
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容