SOLID 是面向对象设计的五大基本原则的首字母缩写,由 Robert C. Martin(Uncle Bob)整理归纳。这五个原则是编写可维护、可扩展代码的基础。

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

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

一个类只做一件事。如果一个类承担了多个职责,那么每个职责的变化都可能影响这个类,导致它越来越难以维护。

反例: 简单工厂模式中的工厂类 Driver 同时负责判断车型和创建所有车对象,违反了单一职责。

O — 开闭原则 (Open-Closed Principle, OCP)

软件实体应该对扩展开放,对修改封闭。

添加新功能时,应该通过新增代码实现,而不是修改已有代码。详见开闭原则

反例: 简单工厂的 if/else 判断链,每新增一种产品都要修改工厂方法。

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

子类必须能够替换其父类,且程序行为不变。

任何使用父类的地方,换成子类后程序应该仍然正确运行。子类不应该破坏父类的契约。

示例: BenzeBmw 都实现了 Car 接口,客户端代码使用 Car 类型,无论实际是哪种车,drive() 都能正确调用。

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

客户端不应该被迫依赖它不使用的方法。

接口应该尽量细化,不要把不相关的方法放在同一个接口里。大接口应该拆分成多个小接口,让实现类只需要关心自己用到的方法。

反例: 一个包含 fly()swim()run()Animal 接口,鱼类被迫实现 fly()run()

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

高层模块不应该依赖低层模块,两者都应该依赖抽象;抽象不应该依赖细节,细节应该依赖抽象。

面向接口编程,而不是面向实现编程。

示例: 工厂模式中客户端 Magnate 依赖 Car 接口,而不是直接依赖 BenzeBmw,这就是依赖倒置的体现。


这五个原则相互关联,共同指向同一个目标:写出低耦合、高内聚、易于扩展和维护的代码