面试题答案
一键面试1. 单一职责原则(SRP)简介
单一职责原则指的是一个类应该仅有一个引起它变化的原因,即一个类应该只负责一项职责。如果一个类承担了过多的职责,那么当其中一个职责发生变化时,可能会影响到其他职责的正常运行。
2. 单例模式遵循单一职责原则分析
以饿汉式单例模式为例:
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
在这个例子中,该单例类的职责非常明确,就是确保在整个应用程序中只有一个实例存在,并提供一个全局访问点。它专注于这一项职责,遵循了单一职责原则。
3. 单例模式可能违背单一职责原则及问题
假设我们对上述单例类进行不合理扩展,增加一些与实例管理无关的业务逻辑,例如:
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
// 新增与实例管理无关的业务逻辑
public void calculateSum(int a, int b) {
System.out.println("Sum: " + (a + b));
}
}
这样该类就承担了两个职责:实例管理和业务计算。如果业务计算逻辑发生变化,就可能影响到单例模式相关的代码,反之亦然。这就违背了单一职责原则,可能导致代码的维护性和可扩展性变差。
4. 改进以符合单一职责原则
将业务逻辑分离出来,创建一个独立的类:
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
public class Calculator {
public void calculateSum(int a, int b) {
System.out.println("Sum: " + (a + b));
}
}
通过这种方式,单例类专注于实例管理,而Calculator
类专注于业务计算,各自职责明确,符合单一职责原则,使得代码更易于维护和扩展。