设计模式之禅-学习笔记 之 第一章:单一职责原则
2015-11-30 12:25
337 查看
第一章:单一职责原则(SRP:Single responsibility principle) | ||||||||||||||||||||||||||||||||||||||||||||
别称: | ||||||||||||||||||||||||||||||||||||||||||||
单一功能原则,设计模式六个基本原则之一 | ||||||||||||||||||||||||||||||||||||||||||||
定义: | ||||||||||||||||||||||||||||||||||||||||||||
There should never be more than one reason for a class to change.(应该有且仅有一个原因引起类的变更) | ||||||||||||||||||||||||||||||||||||||||||||
解释: | ||||||||||||||||||||||||||||||||||||||||||||
单一职责原则要求一个接口、类或方法只有一个原因引起变化,也就是一个接口、类或方法只有一个职责,它就负责一件事情 | ||||||||||||||||||||||||||||||||||||||||||||
问题由来: | ||||||||||||||||||||||||||||||||||||||||||||
之所以会出现单一职责原则就是因为在软件设计时会出现一下类似场景: T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。也就是说职责P1和P2被耦合在了一起 | ||||||||||||||||||||||||||||||||||||||||||||
好处: | ||||||||||||||||||||||||||||||||||||||||||||
1. 类的复杂性降低,实现什么职责都有清晰明确的好处。 | ||||||||||||||||||||||||||||||||||||||||||||
2. 可读性提高,复杂性降低,那当然可读性提高了。 | ||||||||||||||||||||||||||||||||||||||||||||
3. 可维护性提高,可读性提高,那淡然更容易维护了 。 | ||||||||||||||||||||||||||||||||||||||||||||
4. 变更引起的风险降低,变更是必不可少的,如果接口的单一职责做得好,一个接口修改只对吸纳相应的实现类有影 响,对其他接口无影响,这对系统的扩展性,维护性都有非常大的帮助。 | ||||||||||||||||||||||||||||||||||||||||||||
来,亲,咱们扩展一下: | ||||||||||||||||||||||||||||||||||||||||||||
设计模式六个基本原则: | ||||||||||||||||||||||||||||||||||||||||||||
1. 单一职责原则(SRP:Single responsibility principle) | ||||||||||||||||||||||||||||||||||||||||||||
2. 里氏替换原则(LSP:Liskov substitution principle) | ||||||||||||||||||||||||||||||||||||||||||||
3. 依赖倒置原则(DIP:Dependency Inversion Principle) | ||||||||||||||||||||||||||||||||||||||||||||
4. 接口隔离原则(ISP:Interface Segregation Principle) | ||||||||||||||||||||||||||||||||||||||||||||
5. 迪米特法则(LOD:Law of Demeter) | ||||||||||||||||||||||||||||||||||||||||||||
6. 开闭原则(OCP:Open Closed Principle) | ||||||||||||||||||||||||||||||||||||||||||||
范例: | ||||||||||||||||||||||||||||||||||||||||||||
图 1-1是一个用户、机构、角色管理的模块,使用的是RBAC模型(Role-Based Access Control,基于角色的访问控制), 不过这个接口设计的有问题,用户的属性和行为没有分开,这是一个严重的错误!
| ||||||||||||||||||||||||||||||||||||||||||||
相关文章推荐
- python处理文本又一坑--又是编码
- UITextField的使用
- Bugtags 使用技巧之 setUserData
- hdu5569 matrix
- UESTC 58 任意阶矩阵的乘法 虽然简单但优化还是要思考一下的 而且也使自己意识到了原来没有注意的问题
- csky elf文件 查看符号表
- 如何选择前端框架:ANGULAR VS EMBER VS REACT
- ios9 http请求不通。修改plist文件也不行的状况
- 微信企业号如何置顶?
- 【国外戒色经验第十七期】:国外戒友近400天不撸的秘密
- JAVA基础(2)
- AFNetworking 3.0.4
- [leetcode] 91. Decode Ways 解题报告
- 有关Hibernate映射关系 no session or session was closed问题解绝方法
- shell脚本中相关技巧
- div+ajax 实现网页框架布局
- Spring的事务管理
- Error:Android Packager: java.util.zip.ZipException: duplicate entry: AndroidManifest.xml
- 手把手教你XDS100v3仿真器DIY
- LeetCode 130 Surrounded Regions