单一职责原则是什么?
单一职责原则(Single Responsibility Principle)是指修改一个类的原因只能有一个,通俗地讲,即一个类只负责软件中的一个功能。单一职责原则的主要目的是减少复杂度。我们不需要绞尽脑汁去构思如何仅用 200 行代码来实现复杂的设计,实际上完全可以使用十几个清晰的方法。
当程序的规模不断扩大、变更不断增加后,真正的问题才会逐渐显现出来。到了某个时候,类会变得过于庞大,以致于我们无法记住其中的细节。还有一点:如果类负责的功能太多,那么当其中任何一件事发生变化时,我们都必须对类进行修改。而在修改的时候,我们就有可能修改类中自己并不希望被改动的部分。
案例
让我们通过一个案例来帮助我们理解单一职责原则。假设现在有一个图书管理系统,我们定义了一个 Book 类来表示书,一本书有名字、作者、内容等属性。
public class Book {
private String name;
private String author;
private String text;
// constructor, getters and setters
}
这个类在我们的程序中运行得很完美,但是现在如果我们有个新的需求:将书的内容输出到控制台,以便于阅读。这时,如果我们没有充分地考虑,那么我们很可能就直接在 Book 类中新增一个方法:
public class Book {
// ...
void printTextToConsole() {
// Our code for formatting and printing the text to console
}
}
这样做确实能够完成需求,但是却违反了单一职责原则。如果我们再遇到新的需求,比如将书的内容翻译成其他语言、统计书中的高频词汇等,那么 Book 类就会逐渐变得臃肿。遵循单一职责原则,我们可以把打印书的内容这一功能放在单独一个类中实现:
public class BookPrinter {
void printTextToConsole(Book book) {
// Our code for formatting and printing the text to console
}
}
案例源码
可在 GitHub 上查看上述案例的完整代码。
参考资料
以下是本文参考的资料: