【设计模式】软件设计七大原则 ( 单一职责原则 | 代码示例 )
文章目录
- 一、单一职责原则简介
- 二、单一职责原则代码示例 ( 反面示例 )
- 1、不遵循单一职责原则的类
- 2、测试类
- 三、单一职责原则代码示例 ( 正面示例 | 类的单一职责 )
- 1、用翅膀飞的鸟
- 2、用脚走的鸟
- 3、测试类
- 四、单一职责原则代码示例 ( 接口的单一职责 )
- 1、反面示例
- 2、拆分出的接口 1
- 3、拆分出的接口 2
- 4、接口实现类
- 五、单一职责原则代码示例 ( 方法的单一职责 )
- 1、反面示例
- 2、单一职责示例
一、单一职责原则简介
单一职责原则 : 不要存在 多余一个 导致 类变更的原因 ;
假设有一个类 , 负责 222 个职责 , 职责 111 和 职责 222 ;
一旦 需求发生变更 , 如 职责 111 相关功能发生改变 ;
修改该类的 职责 111 功能时 , 有可能导致原本运行正常的职责 222 发生故障 ;
对于上述类 , 应该 分别针对 职责 111 和 职责 222 , 各自建立一个独立的类 , 这样就保证了系统的稳定性 ;
这样修改 职责 111 和 职责 222 中的任何一个功能 , 都不会影响另外一个职责的功能 ;
推荐的开发方法 : 使一个 类 / 接口 / 方法 只负责一项职责 ;
单一职责优点 : 提高 类的 可读性 , 提高 系统的 可维护性 , 降低 类的复杂度 , 降低 变更引起的风险 ;
类越简单 , 可读性越好 , 同时提高了可维护性 ;
一个类只负责一个职责 , 比负责多个职责 , 类要 简单得多 ;
变更是必然的 , 必须要接收变更 , 如果 单一职责原则遵守的好 , 当修改一个功能时 , 可以 显著降低对其它功能的影响 ;
单一职责原则 不只是 面向对象 设计中特有的职责 , 只要是模块化的系统 , 都适合使用单一职责原则 ;
二、单一职责原则代码示例 ( 反面示例 )
1、不遵循单一职责原则的类
Bird 类 , 代表了所有的鸟类 , 主要的移动方式是 用翅膀飞 , 和 用脚走 ;
如果要加入新的鸟 企鹅 , 就需要修改该类的代码 , 在 if … else … 上添加新的分支 , 一旦修改 , 就会导致当前类存在潜在风险 , 影响其它的功能 ;
package singleresponsibility;public class Bird {public void mainMoveMode(String name) {if ("鸵鸟".equals(name)) {System.out.println(name + " 用翅膀飞");} else {System.out.println(name + " 用脚走");}}
}
2、测试类
package singleresponsibility;public class Main {public static void main(String[] args) {Bird bird = new Bird();bird.mainMoveMode("大雁");bird.mainMoveMode("鸵鸟");}
}
执行结果 :
大雁 用脚走
鸵鸟 用翅膀飞
三、单一职责原则代码示例 ( 正面示例 | 类的单一职责 )
上面反面示例中 , Bird 类承担了 222 个职责 , 用翅膀飞的鸟 和 用脚走的鸟 的职责都在一个类中实现 , 这就导致了一旦修改一个职责 , 另外一个也有可能被影响 ;
1、用翅膀飞的鸟
package singleresponsibility;/*** 用翅膀飞的鸟* 本类的职责单一 , 只负责用翅膀飞的鸟的移动*/
public class FlyBird {public void mainMoveMode(String name) {System.out.println(name + " 用翅膀飞");}
}
2、用脚走的鸟
package singleresponsibility;/*** 用脚走路的鸟* 本类的职责单一 , 只负责用脚走的鸟的移动*/
public class WalkBird {public void mainMoveMode(String name) {System.out.println(name + " 用脚走");}
}
3、测试类
package singleresponsibility;public class Main {public static void main(String[] args) {FlyBird flyBird = new FlyBird();flyBird.mainMoveMode("大雁");WalkBird walkBird = new WalkBird();walkBird.mainMoveMode("鸵鸟");}
}
执行结果 :
大雁 用脚走
鸵鸟 用翅膀飞
四、单一职责原则代码示例 ( 接口的单一职责 )
1、反面示例
该 IGood 接口负责两大块职责 , 获取商品信息 获取 名称 / 价格 , 管理商品 购买 / 退款 ;
这个接口设计 , 违背了单一职责原则 ;
package singleresponsibility;/*** 该接口负责两大块职责* 获取商品信息 获取 名称 / 价格* 管理商品 购买 / 退款* 这样就违背了单一职责原则*/
public interface IGood {/*** 获取商品名称* @return*/String getName();/*** 获取价格* @return*/double getPrice();/*** 购买商品*/void buyGood();/*** 退款*/void refund();
}
2、拆分出的接口 1
package singleresponsibility;/*** 信息管理* 该接口负责 获取商品信息 获取 名称 / 价格*/
public interface IGoodInfo {/*** 获取商品名称* @return*/String getName();/*** 获取价格* @return*/double getPrice();
}
3、拆分出的接口 2
package singleresponsibility;/*** 商品管理* 负责商品的 购买 / 退款*/
public interface IGoodManager {/*** 购买商品*/void buyGood();/*** 退款*/void refund();
}
4、接口实现类
package singleresponsibility;/*** 商品实现类* 同时实现 IGoodManager 和 IGoodInfo 两个接口*/
public class GoodImpl implements IGoodManager, IGoodInfo{@Overridepublic String getName() {return null;}@Overridepublic double getPrice() {return 0;}@Overridepublic void buyGood() {}@Overridepublic void refund() {}
}
五、单一职责原则代码示例 ( 方法的单一职责 )
如果一个方法中 , 存在了 大块的 if … else … 判定 , 说明应该将其拆分成两个不同的方法 ;
1、反面示例
package singleresponsibility;public class Good {/*** 更新商品的 名称 和 价格信息* 该方法的职责就不是单一职责的* 如果要针对 价格 信息修改策略进行修改* 会连带这 另外一个 职责 修改名称 , 也存了未知风险* @param name* @param price*/public void updateGoodInfo(String name, double price) {}
}
2、单一职责示例
package singleresponsibility;public class Good {/*** 更新商品的名称* @param name*/public void updateGoodName(String name) {}/*** 更新商品的价格* @param price*/public void updateGoodPrice(double price) {}
}
【设计模式】软件设计七大原则 ( 单一职责原则 | 代码示例 )相关推荐
- Java设计模式七大原则-单一职责原则
目录 概述:设计模式的目的 设计模式七大原则 单一职责原则 单一职责原则注意事项和细节 概述:设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等 ...
- 设计原则-单一职责原则
单一职责原则 文章目录 单一职责原则 概述 单一职责原则问题由来 职责如何理解呢? 什么是职责呢 ? 举例1 Rectangle 个人理解 举例2 Modem SRP核心思想 总结 参考文档 概述 在 ...
- 设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)
设计原则 单一职责原则(SRP) 从三大特性角度看原则: 应用的设计模式: 开放封闭原则(OCP) 从三大特性角度看原则: 应用的设计模式: 里氏替换原则(LSP) 从三大特性角度看原则: 应用的设计 ...
- 设计模式原则—单一职责原则
设计模式概念与作用: 设计模式是一套被反复使用的.多数人知晓.经过分类编目的优秀代码设计经验的总结.特定环境下特定问题的处理方法. 1)重用设计和代码 重用设计比重用代码更有意义,自动带来代码重用 2 ...
- 设计规则之单一职责原则
tip: 需要<设计模式之禅>的pdf,可以联系我 作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了.我们应该让自己写的代码更加优雅,即使这会费时费力. 相关规则: ...
- 六大设计原则-单一职责原则
1.开闭原则 2.接口隔离原则 3.依赖倒置原则 4.迪米特原则 5.里氏替换原则 6.单一职责原则 单一职责原则 针对的问题 类T负责两个不同职责:职责 ...
- 设计模式-软件设计七大原则
目录 综述 1.开闭原则 1.1开闭原则的定义 1.2开闭原则的作用 1.3开闭原则的实现方法 2.里氏替换原则 2.1里氏替换原则的定义 2.2里氏替换原则的作用 2.3里氏替换原则的实现方法 3. ...
- 设计模式-七大原则-单一职责原则
单一职责原则 基本介绍 对类来说,即一个类应该只负责一项职责.如A类负责两个不同的职责: 职责1,职责2. 当职责1需求变更而改变A的代码时,可能造成职责2执行错误,所以需要将A的粒度分解为A1,A2 ...
- 七大设计原则-单一职责原则
文章目录 前言 基本介绍 应用实例 方案1 方案2 方案3 注意事项 前言 设计模式相关文章主要来自B站尚硅谷的学习视频的心得 B站视频传送门 设计模式系列文章传送门23种设计模式系列合集 有空会慢慢 ...
最新文章
- 冻结拆分_冻结首行与尾行?还有能这种操作
- android wear2.9新功能,Android Wear 2.0确认2月9日正式登场
- linux遍历目录源代码
- ajax的访问 WebService 的方法
- Linux学习总结(4)——Centos6.5使用yum安装mysql——快速上手必备
- mysql评论与回复一起查_mysql 查询所有评论以及回复
- Bean和Spirng模块
- python四种方法实现去除列表中的重复元素
- Kubernetes如何删除deployment
- Dynamic CRM 2013学习笔记(四)单据编号及插件批量注册工具
- pip下载速度慢的解决办法
- 个人总结 超详细 windows10下载与安装
- 互联网常用系统监控工具
- 博客专家申请规则变更调整
- flask 起服务 、访问
- Markdown语法笔记
- c51实现老人跌倒,心率异常报警系统
- 周计划周记录:2022年6月6日-2022年6月12日
- 【codeforces 821E】Okabe and El Psy Kongroo
- mysql查询最小分数_MySQL数分:简单查询
热门文章
- 后台接口数量及粒度的一些思考总结
- 专业课学习——建立 SCT 数据库
- 护眼台灯真的护眼吗?为家长推荐四款真正护眼的台灯
- 成都java培训一般需要多久
- 【P2P overlay network】跨内外网络虚拟私有云
- HIT-ICS2022大作业-程序人生-Hello’s P2P
- The Codeless Code: Case 5 Void(void本质是什么)
- 北大计算机图灵班,北京大学举办图灵班开班仪式
- 国内计算机博士去百度云,于博士Cadence视频教程60集全套百度网盘分享
- 计算机音乐谱消愁,消愁简谱-毛不易-歌词字字扎心,听者个个飙泪