怎么制作网站域名,网站备案需要什么东西,中国有色金属价格网,网站建设廴金手指花总壹陆单一职责原则
概述
简单来说就是一个类只描述一件事#xff0c; 比如我们熟知的 userDao.java 只负责 用户域功能。如果userDao既操作user表又操作order表#xff0c;这显然不合理。正确的做法是让orderDao.java去操作order表。 对类来说的#xff0c;一个类应该只负责一项…单一职责原则
概述
简单来说就是一个类只描述一件事 比如我们熟知的 userDao.java 只负责 用户域功能。如果userDao既操作user表又操作order表这显然不合理。正确的做法是让orderDao.java去操作order表。 对类来说的一个类应该只负责一项职责。如类A负责两个不同职责:职责1职责2。当职责1需求变更而改变A时可能造成职责2执行错误所以需要将类A的粒度分解为A1A2。
代码分析
反例
public class SingleResponsibility1 {public static void main(String[] args) {Vehicle vehicle new Vehicle();vehicle.run(汽车);vehicle.run(轮船);vehicle.run(飞机);}
}//交通工具类
//1.在方式1中的run方法违反了单一职责原则
//2.解决方法非常简单根据交通方案的不同 分解成不同的类即可
class Vehicle{public void run (String vehicle){System.out.println(vehicle在公路上运行......);}
}正例
public class SingleResponsibility2 {public static void main(String[] args) {RoadVehicle roadVehicle new RoadVehicle();roadVehicle.run(汽车);AirVehicle airVehicle new AirVehicle();airVehicle.run(飞机);WaterVehicle waterVehicle new WaterVehicle();waterVehicle.run(轮船);}}//交通工具类
//1.遵守单一职责原则
//2.但是这样改动很大即将类分解同时修改了客户端
//3.改进 直接修改Vehicle类改动的代码会比较少 方案3
class RoadVehicle{public void run (String vehicle){System.out.println(vehicle在公路上运行......);}
}class AirVehicle{public void run (String vehicle){System.out.println(vehicle在天空上运行......);}
}class WaterVehicle{public void run (String vehicle){System.out.println(vehicle在水里上运行......);}
}优化
public class SingleResponsibility3 {public static void main(String[] args) {Vehicle2 vehicle new Vehicle2();vehicle.run(汽车);vehicle.runWater(轮船);vehicle.runAir(飞机);}
}//交通工具类
//1.这种修改方式没有对原来的类做大的修改只是增加了方法
//2.虽然没有在类这一级别上遵守单一职责原则但是在方法级别上仍然是遵守了单一职责
class Vehicle2{public void run (String vehicle){System.out.println(vehicle在公路上运行......);}public void runAir (String vehicle){System.out.println(vehicle在天空上运行......);}public void runWater (String vehicle){System.out.println(vehicle在水中上运行......);}
}一些细节
降低类的复杂度一个类只负责一项职责提高类的可读性可维护性降低变更引起的风险假想现在需求变更要求汽车只能在7点~21点在公路上运行而飞机每半小时只能起飞一架比较以下三种方式实现变更的代码修改量通常情况下我们应当遵守单一职责原则只有逻辑足够简单才可以在代码级违反单一职责原则只有类中的方法数量足够少才可以在方法级别保持单一职责原则 关注我共同进步每周至少一更。——Wayne