设计模式之禅之单一职责原则
声明:本文为阅读秦小波所写的《设计模式之禅》所写小结,文章内容可能有部分引述此书。
单一职责原则(Single Responsibility Principle)
1、定义:
在接口、方法的定义上,需要单一职责,一个接口就只干一类事情,一个方法只干一件事情。此原则中心要义:有且仅有一个原因引起类的变更。
在项目上,对于用户角色管理这块,一般是基于RBAC模型:Role-Based Access Control 基于角色的访问控制。它的定义是:通过分配和取消角色来完成用户权限的授予和取消,使动作主体(用户)与资源行为(权限)分离。
- BO:Business Object 业务对象 ---- 负责属性
- BIZ:Business Logic 业务逻辑 ---- 负责行为
RBAC模型就符合了单一职责原则,将业务对象和业务逻辑分离,彼此只干属于自己的这一类事情,职责清晰,彼此不干涉。但彼此聚合起来又能完成业务的处理。
举例:
interface IUserManager{....../*** 修改用户信息* @param userName 用户名* @param homeAddress 用户地址* @param telNumber 用户手机号*/public void changeUser(String userName, String homeAddress, String telNumber){//业务逻辑处理}......
}
以上changeUser方法就不符合单一职责原则,一个方法干了修改用户名,用户地址和手机号的三件事,造成了方法职责不清晰。一旦某人电话号码或者地址变了,还需要再次调用这个方法,将三个信息同时再次输入进去,同时也增大了日后维护的工作量。
进行修改处理:
interface IUserManager{....../*** 修改用户名* @param userName 用户名*/public void changeUserName(String userName){//业务逻辑处理}/*** 修改用户地址* @param homeAddress 用户地址*/public void changeHomeAddress(String homeAddress){//业务逻辑处理}/*** 修改用户手机号* @param telNumber 用户手机号*/public void changeUserTelNumber(String telNumber){//业务逻辑处理}......
}
这样修改之后,方法一目了然,知道每个方法都是具体干什么事情,后期维护一旦有相应变化时,只需调用专门负责的方法进行修改即可。
2、单一职责的好处:
1) 类的复杂度降低:实现什么职责都有明确清晰的定义,这个在接口上定义时特别要区分清楚;
2) 可读性提高了:知道某个接口具体做哪件事;
3) 可维护性提高了:知道这个接口只做这件事;
4) 变更影响的风险降低了:接口的改变只对实现类有影响,对其他接口无影响。
3、如何使用?
在接口定义上,要清楚该接口的职责,只干一件事,不要一个接口揽多个活。
小结:接口以及方法一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。
注:本文大多数内容基本从《设计模式之禅中》摘录,也有小部分自己的理解,如果有误欢迎大家批评指正。如有问题,也欢迎大家积极留言探讨。
设计模式之禅之单一职责原则相关推荐
- 学习设计模式 - 六大基本原则之单一职责原则
设计模式总共有六大基本原则,统称为SOLID (稳定)原则,分别是S-单一职责原则(Single Responsibility Principle), O-开闭原则(Open closed Princ ...
- 每天一学设计模式(一、单一职责原则)
引言 本文参考以下这篇文章 https://blog.csdn.net/guorui_java/article/details/125947300 定义 单一职责原则(Single responsib ...
- 设计模式个人总结,单一职责原则总结
总结经验 近期自学Unity引擎,学到了关于设计模式这一块,以前学习Java多次接触设计模式,也在应用的开发过程中频繁使用.虽然开发过程中没有特意去强调使用设计模式,但设计模式的使用总是潜移默化的,现 ...
- 设计模式(一)---单一职责原则
单一职责原则:就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力.这种耦合会导致脆弱的设计,当变 ...
- 设计模式之禅(读后感悟随笔)-单一职责原则
一直以来,自己读过的技术类书籍也不少了,但是都犯了一个毛病就是没有很好的记录下来,有些东西可能并不是平日开发中时时刻刻用到的,随着时间的延长,学过的东西慢慢也就淡忘了,刚好最近有些时间,也正打算把&l ...
- 设计模式|理解单一职责原则
软件质量保障 专注测试圈,自动化测试.测试平台开发.测试新技术.大厂测试岗面经分享, 可以帮忙内推BATJ等大厂!欢迎加VX沟通交流: ISTE1024 很早想总结一些关于设计模式的文章了,回头看一下 ...
- 设计模式原则——单一职责原则
前言 设计模式这部分我选择的书籍是一本叫做<设计模式之禅>的书,虽然内容可能不是特别友好,但是内容详尽有层次,一眼看去就可以大致了解整个结构.对于一门学问,有时候先从整体弄懂学习内容也 ...
- 围观设计模式(1)--单一职责原则(SRP,Single Responsibility Principle)
沉寂了一个月的时间,仔细学习了下设计模式,从本篇博文开始陆续更新设计模式系列的文章,我给它起了个有意思的名字叫做:"围观"设计模式,当然围观是加引号的,我写博文分享的目的一方面是将 ...
- 前端中会用到的设计模式之单一职责原则
1:设计模式应用不应用,取决于对现在和未来判断后的取舍.没必要用尽量不用! 2.设计模式的目的是 减少复杂度(一个函数中包含的功能个数), 降低耦合度(一个对象与其他对象的关系个数).耦合度不能为0 ...
最新文章
- frame,iframe,frameset之间的关系与区别
- Keras Theano 输出中间层结果
- js全局变量和局部变量
- HANA全面上市,成为SAP史上用户数量增长最快的产品之一
- 如何修改Series和DataFrame类型中的元素值_Redis的HSCAN命令中COUNT参数的失效场景
- [蓝桥杯][基础练习VIP]分解质因数
- python 元类 type_python Class:面向对象高级编程 元类:type
- plsql存过声明游标_plsql编程学习之游标一
- python显示日历_python显示日期
- Androidstudio抽取成员变量快捷键 快捷键大全 自定义setting文件
- win32项目--获取、修改计算机屏幕分辨率
- Linux中tar分卷压缩与解压缩
- <choose>标签的使用
- 史上最全推广小程序实操方法
- WCF基础教程(三)——WCF通信过程及配置文件解析
- gitlab代码提交自动触发Jenkins token发版(二)
- 【葡萄城报表案例分享】项目施工进度报告 – 树形报表
- 朴素贝叶斯——垃圾邮件过滤
- C语言计算圆柱的表面积 体积
- 鸟人的Android揭秘(3)——Android 编译环境搭建
热门文章
- jquery ui 主题_使用jQuery UI主题
- word打开老是配置进度_打开word2007时总是出现配置进度,怎么解决?
- windows10系统自带linux子系统(WSL)的安装目录
- SIMCOM AT指令大全
- 风险加权资产(RWA)分析管理系统
- 实验室家具系列之通风柜
- C numi和弓道 双指针(2020牛客寒假基础训练营1 )
- 18行的python快递查询
- 【PhpSpreadsheet】实现excel冻结列和行(即左右滚动时指定列和行固定不动)
- COGS 2211. [BZOJ3653]谈笑风生