Java设计模式中的单一责任原则详解
1、基本介绍
对类来说,即一个类应该只负责一项职责。
如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分为A1,A2
2、应用实例
2.1未遵循单一责任原则
在方式1的run方法中,飞机在公路上运行。明显违反了单一责任原则
package com.weirdo.principle.singleResponsibility; public class SingleResponsibility1 { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.run("摩托车"); vehicle.run("汽车"); vehicle.run("飞机"); } //交通工具类 static class Vehicle{ public void run(String vehicle){ System.out.println(vehicle+"在公路上运行..."); } } }
2.2遵循单一责任原则(类级)
遵守单一责任原则。
但是这样做改动很大,即将类分写,同时需要修改客户端。
package com.weirdo.singleResponsibility; public class SingleResponsibility2 { public static void main(String[] args) { RoadVehicle roadVehicle = new RoadVehicle(); roadVehicle.run("摩托车"); roadVehicle.run("汽车"); AirVehicle airVehicle = new AirVehicle(); airVehicle.run("飞机"); } static class RoadVehicle { public void run(String vehicle) { System.out.println(vehicle + "在公路上运行..."); } } static class AirVehicle { public void run(String vehicle) { System.out.println(vehicle + "在天上上运行..."); } } }
2.3遵循单一责任原则(方法级)
这种修改方法没有对原来的类做大的修改,只是增加方法。
然没有在类这个级别上遵守单一责任原则,但是在方法级别上仍然是遵守单一责任
package com.weirdo.singleResponsibility; public class SingleResponsibility3 { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.runAir("飞机"); vehicle.runRoad("汽车"); vehicle.runWater("航母"); } static class Vehicle { public void runRoad(String vehicle) { System.out.println(vehicle + "在公路上运行..."); } public void runAir(String vehicle) { System.out.println(vehicle + "在公路上运行..."); } public void runWater(String vehicle) { System.out.println(vehicle + "在水里运行..."); } } }
3、注意事项
- 降低类的复杂都,一个类只负责一项职责
- 提高类的可读性,可维护性
- 通常情况下,应该遵守单一责任原则。只有逻辑足够简单,才可以在代码级违反单一责任原则:只有类中方法数量足够少。可以在方法级别保持单一责任原则
到此这篇关于Java设计模式中的单一责任原则详解的文章就介绍到这了,更多相关Java单一责任原则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Springboot整合Mybatis和SQLite的详细过程
这篇文章主要介绍了Springboot整合Mybatis和SQLite的详细过程,本文通过图文示例相结合给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧2024-07-07Spring Cloud Ribbon实现客户端负载均衡的方法
本篇文章主要介绍了Spring Cloud Ribbon实现客户端负载均衡的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-05-05springboot vue接口测试前后端实现模块树列表功能
这篇文章主要为大家介绍了springboot vue接口测试前后端实现模块树列表功能,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-05-05Java中DataInputStream和DataOutputStream的使用方法
这篇文章主要介绍了Java中DataInputStream和DataOutputStream的使用方法,通过创建对象展开具体的内容介绍,需要的小伙伴可以参考一下2022-05-05
最新评论