前言: 这些都是老师布置的作业得写,顺便记录下
单一职责原则官方解释: 对类来说的,即一个类应该只负责一项职责。
理解: 如果类 A 负责两个不同职责:职责 1,职责 2。当职责 1 需求变更而改变 A 时,可能造成职责 2 执行错误,所以需要将类 A 的粒度分解为 B 和 C,这样 B 就专门解决职责 1, C 就专门解决职责 2
如下面这个例子就没有体现单一职责原则,可以发现Vehicle这个类既去 让 "汽车" 在路上运行,同时也让 "飞机" 在路上运行,明显就错误了!
public class demo1 {
public static void main(String[] args) {
Vehicle v = new Vehicle();
v.run("汽车");
v.run("飞机");
}
}
class Vehicle{
public void run(String vehicle) {
System.out.println(vehicle + "正在路上运行!");
}
}
再看下面这个例子,我们用两个类去定义各自去实现 "飞机" "汽车"的 run 方法,这样子就不会出现类似的错误了!
public class demo2 {
public static void main(String[] args) {
RoadVehicle v1 = new RoadVehicle();
AirVehicle v2 = new AirVehicle();
v1.run("汽车");
v2.run("飞机");
}
}
class RoadVehicle{
public void run(String vehicle) {
System.out.println(vehicle + "正在路上运行!");
}
}
class AirVehicle{
public void run(String vehicle) {
System.out.println(vehicle + "正在天上运行!");
}
}
总结: 单一职责的原则注意事项和细节
-
降低类的复杂度,一个类只负责一项职责。
-
提高类的可读性,可维护性
-
降低变更引起的风险
个人理解:其实还是高内聚 低耦合 !
但是再思考下,如果工作量少的话,这样子去实现会特别的臃肿,大材小用了,那么当工作量少的话还可以如下去实现,把 类 降一级成为 方法!
这里虽然没有在类的级别上遵守单一职责原则,但是在方法的级别上,仍然是遵守单一职责
public class demo3 {
public static void main(String[] args) {
Vehicle v = new Vehicle();
v.runRoad("汽车");
v.runWater("飞机");
}
}
class Vehicle{
public void runRoad(String vehicle) {
System.out.println(vehicle + "正在路上运行!");
}
public void runWater(String vehicle) {
System.out.println(vehicle + "正在天上运行!");
}
}
总结:通常情况下,我们应当遵守单一职责原则,只有当逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则