设计模式-七大原则-单一职责原则
单一职责原则
基本介绍
对类来说,即一个类应该只负责一项职责。如A类负责两个不同的职责: 职责1,职责2。
当职责1需求变更而改变A的代码时,可能造成职责2执行错误,所以需要将A的粒度分解为A1,A2。
例如UserDao只负责对User的增删查改
例如一个Dao又对User进行增删改查又对Order进行增删查改,这就违背了单一职责,
此时可以拆分成UserDao和OrderDao
问题代码示例
/*** 非单一职责*/
public class SingleResponsibility1 {public static void main(String[] args) {Vehicle vehicle = new Vehicle();vehicle.run("摩托车");vehicle.run("小汽车");// 这里就违反了单一职责,飞机不能在公路上跑vehicle.run("飞机");}
}/*** 交通工具类*/
class Vehicle {/*** 如果传递进来的是飞机, 这里就违背了单一职责** @param vehicle 需要run的交通工具*/public void run(String vehicle) {System.out.println(vehicle + " 在公路上跑....");}
}
上面代码的输出结果, 这里的Vehicle类的run方法就违背了单一职责原则
修改上面的代码,遵守单一职责
/*** 单一职责*/
public class SingleResponsibility2 {public static void main(String[] args) {// 路上跑的RoadVehicle roadVehicle = new RoadVehicle();roadVehicle.run("小汽车");roadVehicle.run("摩托车");// 天上飞的AirVehicle airVehicle = new AirVehicle();airVehicle.run("波音747");// 水里跑的WaterVehicle waterVehicle = new WaterVehicle();waterVehicle.run("辽宁舰航母");}
}/*** 公路运行交通工具类*/
class RoadVehicle {/*** @param vehicle 需要在公路运行的交通工具*/public void run(String vehicle) {System.out.println(vehicle + "公路运行");}
}/*** 天上运行交通工具类*/
class AirVehicle {/*** @param vehicle 需要在天上运行的交通工具*/public void run(String vehicle) {System.out.println(vehicle + "天上运行");}
}/*** 水上运行交通工具类*/
class WaterVehicle {/*** @param vehicle 需要在水上运行的交通工具*/public void run(String vehicle) {System.out.println(vehicle + "水上运行");}
}
上面的代码输出如下,虽然确实实现了单一职责,但是对代码的改动太大,需要分解类,同时会增加调用方的代码,不是很好
最后优化的单一职责
/*** 优化后的单一职责*/
public class SingleResponsibility3 {public static void main(String[] args) {Vehicle2 vehicle2 = new Vehicle2();// 根据不同的交通工具调用不同的方法vehicle2.runOnAir("波音747");vehicle2.runOnWater("辽宁号航母");vehicle2.runOnRoad("小汽车");vehicle2.runOnRoad("摩托车");}
}/**- 运行交通工具的类*/
class Vehicle2 {/*** 在公路运行的方法** @param vehicle 交通工具*/public void runOnRoad(String vehicle) {System.out.println(vehicle + "公路运行");}/*** 在水上运行的方法** @param vehicle 交通工具*/public void runOnWater(String vehicle) {System.out.println(vehicle + "水上运行");}/*** 在天上运行的方法** @param vehicle 交通工具*/public void runOnAir(String vehicle) {System.out.println(vehicle + "天上运行");}
}
这种修改方法没有对原来的类做大的修改,只是增加了方法。
虽然在类这个级别上没有遵循单一职责,但是在方法上遵循了。
总结
单一职责原则注意的事项和细节
- 降低类的复杂度,一个类只负责一项职责
- 提高类的可读性,可维护性
- 降低变更引起的风险
- 通常情况下,我们应当遵循单一职责原则。如果类里面的方法数量足够少,就可以选择在方法级别上保持 单一设计原则;如果类里面设计到的方法太多,还是应该选择从类级别保持单一设计原则。
设计模式-七大原则-单一职责原则相关推荐
- Java设计模式七大原则-单一职责原则
目录 概述:设计模式的目的 设计模式七大原则 单一职责原则 单一职责原则注意事项和细节 概述:设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等 ...
- 大话设计模式三之单一职责原则、开放-封闭原则、依赖倒置原则、里氏代换原则
单一职责原则 单一职责原则(SRP),意思就是说,功能要单一.准确解释是,就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或 ...
- 设计模式原则—单一职责原则
设计模式概念与作用: 设计模式是一套被反复使用的.多数人知晓.经过分类编目的优秀代码设计经验的总结.特定环境下特定问题的处理方法. 1)重用设计和代码 重用设计比重用代码更有意义,自动带来代码重用 2 ...
- android activity解耦,Android与设计模式:用单一职责原则为Activity解耦
一.什么是单一职责原则单一职责原则(SRP:Single responsibility principle)又称单一功能原则,其定义为:一个类,应该只有一个可以导致变化的原因.光看概念 一.什么是单一 ...
- 设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)
设计原则 单一职责原则(SRP) 从三大特性角度看原则: 应用的设计模式: 开放封闭原则(OCP) 从三大特性角度看原则: 应用的设计模式: 里氏替换原则(LSP) 从三大特性角度看原则: 应用的设计 ...
- 六大设计原则-单一职责原则
1.开闭原则 2.接口隔离原则 3.依赖倒置原则 4.迪米特原则 5.里氏替换原则 6.单一职责原则 单一职责原则 针对的问题 类T负责两个不同职责:职责 ...
- 【设计模式】软件设计七大原则 ( 单一职责原则 | 代码示例 )
文章目录 一.单一职责原则简介 二.单一职责原则代码示例 ( 反面示例 ) 1.不遵循单一职责原则的类 2.测试类 三.单一职责原则代码示例 ( 正面示例 | 类的单一职责 ) 1.用翅膀飞的鸟 2. ...
- 设计模式原则--单一职责原则
单一职责原则(SRP) 定义:就一个类而言,应该仅有一个引起它变化的原因 场景: 一个公司有3类员工,分别是 主管,程序员,销售 代码: using System; using System.Coll ...
- 设计模式|理解单一职责原则
软件质量保障 专注测试圈,自动化测试.测试平台开发.测试新技术.大厂测试岗面经分享, 可以帮忙内推BATJ等大厂!欢迎加VX沟通交流: ISTE1024 很早想总结一些关于设计模式的文章了,回头看一下 ...
最新文章
- Alexa偷录私密对话并发送,继诡笑之后出现又一神举动
- C#中的==、Equal、ReferenceEqual(转载)
- vue依赖缓存_Vue SSR服务端渲染之数据缓存
- 微软从安卓那里获取的盈利比重WinPhone 7还多
- 通过AT指令控制ESP8266
- mysql function
- 转 Django url 标签的使用
- 百度天链平台:企业区块链技术赋能产业创新落地
- 从技术角度谈一谈,我参与设计开发的手Q春节红包项目
- layui icon服务器上显示不出来,关于layui的动态图标不显示的解决方法
- mac 字体微软雅黑字体_在Microsoft Word 2007中搜索和替换特定格式(字体,样式等)...
- B2C 和 C2C 你们是怎么区别的?
- android6最新版本,安卓版“AirDrop”发布,安卓6版本以上都能用!
- 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台
- 2021.4.14 html学习第二天
- 汽车高级驾驶辅助系统ADAS功能盘点
- [软件工程 复习] 记录
- 微信小程序上实现 table 表格
- 网易邮箱VIP注册页面可部分绕过Windows安全中心的验证
- 波奇C语言模拟通讯录设计
热门文章
- 【团队建设】团队建设之初篇
- 河南艺术职业学院计算机怎么样,河南艺术职业学院好不好,多少分可以上附真实评价...
- Http Post注册QQ号码 分析流程图 更新时间20141206
- node.js卸载、安装、配置详解
- Python自建Moudle导入时ModuleNotFoundErro问题的解决方法
- java邮件抄送_Java发送邮件遇到的常见需求汇总
- 无学历,无技能,无背景,怎么找工作呢?
- dotnet C# 如何正确获取藏文的字数
- 网络系统集成工程师——十八般武艺
- 假如有机会重新学习计算机