单一职责原则
- 基本介绍
对类来说,即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2。
单一职责原则理解:写一个较大工程时,若所需实现功能较多,但大致的方向均有迹可循。则可将工程分为N个方向去建类,在一个类中在书写方法。
- 应用实例
例1:
此法功能较为单一,仅实现一种功能,非常不建议使用
public class example01 {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.run("摩托车");
vehicle.run("汽车");
vehicle.run("飞机");
}
}
class Vehicle{
public void run(String vehicle) {
System.out.println(vehicle+"在马路上跑");
}
}
例2:
此法虽然对类进行了单一职责原则,但此做法开销过大,修改不易
public class example02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
RoadVehicle roadVehicle=new RoadVehicle();
roadVehicle.run("自行车");
AirVehicle airVehicle = new AirVehicle();
airVehicle.run("飞机");
}
}
class RoadVehicle{
public void run(String vehicle){
System.out.println(vehicle+"在马路上跑");
}
}
class AirVehicle{
public void run(String vehicle){
System.out.println(vehicle+"在天上飞");
}
}
例3:
package 单一职责原则;
public class example01 {
public static void main(String[] args) {
JiaoTong jiaoTong=new JiaoTong();
jiaoTong.run("自行车");
People people=new People();
people.boy("男孩");
}
}
class JiaoTong{
public void run(String jiaotong){
System.out.println(jiaotong+"在路上奔跑");
}
public void air(String jiaotong){
System.out.println(jiaotong+"在天上飞");
}
}
class People{
public void boy(String people){
System.out.println(people+"在唱歌");
}
public void girl(String people){
System.out.println(people+"在跳舞");
}
}
思路:
在写代码时,必须清楚自己将要写的工程中需要建的类的大方向都有什么(例如:交通,人类等)
确定方向之后,写类。类中需明确这一个大方向中所分的小方向的部分需要完成什么功能(例如:交通类中的run完成的是陆地上的交通工具可以执行的操作)
完善main函数
注意事项与细节
- 降低类的复杂度,一个类只负责一项职责
- 提高类的可读性,可维护性
- 降低变更引起的风险
- 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则