设计模式 - 浅谈单一职责原则
单一职责原则
原则说明:单一职责原则(Single responsibility principle)规定每个类都应该有一个单一的功能,并且该功能应该由这个类完全封装起来。
为什么要遵守该原则
违反单一职责原则会导致代码的复杂性增加,可读性降低,同时也会增加代码修改的难度。当一个类承担的职责过多时,这个类的复杂性就会增加,这就增加了出错的可能性。
示例
假定我们要输出一个日志,定义了一个日志类
。
public class Log {
public void getLog() {
// 获取Log
}
public void formatLog() {
// 格式化Log
}
public void printLog() {
// 打印Log
}
}
这个类违反了单一职责原则,因为它有三个职责:获取日志、格式化日志和打印日志。
如果我们需要改变日志的获取方式(或改变日志的格式或打印方式),我们就需要修改这个类。
为了遵守单一职责原则,我们应该将这个类分解为三个类,每个类只负责一项职责。
public class Log {
public void getLog() {
// 获取Log
}
}
public class LogFormatter {
public void formatLog(Log log) {
// 格式化Log
}
}
public class LogPrinter {
public void printLog(Log log) {
// 打印Log
}
}
这样我们就遵守了单一职责,我们的代码就更加模块化,易于理解和维护。
[...]}与单一职责的区别回顾一下单一职责原则。就会发现,这两个特别像,那么区别是什么?单一职责原则强调的是类和模块的职责划分。它要求一个类或者模块只负责一项职责,这样做的好处是当这项职责发生变化时,只需要修改这个类或模块,不会影响到其他的功能。接口隔离原则则是从接口的角度来看待问题。它要求我们在设计接口时,应该尽量细化接口,让接口尽可能小。这样做的好处是降低了类之间的耦合度,提高了代码的灵活性。单一职责[...]