Java中的SOLID原则:从理论到代码的完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java中的SOLID原则:从理论到实践

SOLID是罗伯特·马丁(鲍勃大叔)提出的五个面向对象编程基本原则的首字母缩写。这些原则帮助开发者创建灵活、可维护且易于扩展的代码。在本文中,我们将通过Java示例,从简单的理论到实际实践,逐一剖析每个SOLID原则。



1. 单一职责原则(SRP)

理论:一个类应该只有一个引起变化的原因。换句话说,每个类应该只负责一个功能。

违反SRP:

public class Employee {    public void calculatePay() { /* 计算薪资 */ }    public void saveToDatabase() { /* 保存到数据库 */ }    public void generateReport() { /* 生成报告 */ }}

修正:

public class Employee { /* 仅包含数据 */ }

public class PayCalculator { public void calculatePay(Employee emp) { /* ... */ }}

public class EmployeeRepository { public void save(Employee emp) { /* ... */ }}

public class ReportGenerator { public void generate(Employee emp) { /* ... */ }}

现在每个类都有明确的单一职责,简化了测试和维护。



2. 开闭原则(OCP)

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

违反OCP:

public class ShapeDrawer {    public void draw(String shapeType) {        if ("circle".equals(shapeType)) {            // 画圆        } else if ("rectangle".equals(shapeType)) {            // 画矩形        }    }}

通过多态修正:

public interface Shape {    void draw();}

public class Circle implements Shape { @Override public void draw() { /* 画圆 */ }}

public class Rectangle implements Shape { @Override public void draw() { /* 画矩形 */ }}

public class ShapeDrawer { public void draw(Shape shape) { shape.draw(); }}

现在添加新形状(例如Triangle)时无需修改现有代码——只需创建一个实现Shape接口的新类即可。



3. 里氏替换原则(LSP)

理论:程序中的对象应该可以被其子类型的实例替换,而不影响程序的正确性。如果S是T的子类型,那么类型T的对象可以被类型S的对象替换,而不会破坏程序运行。

经典的LSP违反:

public class Rectangle {    protected int width, height;    public void setWidth(int w) { width = w; }    public void setHeight(int h) { height = h; }    public int getArea() { return width * height; }}

public class Square extends Rectangle { @Override public void setWidth(int w) { super.setWidth(w); super.setHeight(w); } @Override public void setHeight(int h) { super.setWidth(h); super.setHeight(h); }}

使用Rectangle的客户端期望改变宽度不会影响高度。正方形违反了这一期望。解决方案:使用通用接口或独立的类,避免继承。



4. 接口隔离原则(ISP)

理论:客户端不应依赖它们不使用的接口方法。最好有多个专门的接口,而不是一个“臃肿”的接口。

违反ISP:

                

博客

书籍推荐