声明:本文为阅读秦小波所写的《设计模式之禅》所写小结,文章内容可能有部分引述此书。

单一职责原则(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、如何使用?

   在接口定义上,要清楚该接口的职责,只干一件事,不要一个接口揽多个活。

小结:接口以及方法一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。

注:本文大多数内容基本从《设计模式之禅中》摘录,也有小部分自己的理解,如果有误欢迎大家批评指正。如有问题,也欢迎大家积极留言探讨。

设计模式之禅之单一职责原则相关推荐

  1. 学习设计模式 - 六大基本原则之单一职责原则

    设计模式总共有六大基本原则,统称为SOLID (稳定)原则,分别是S-单一职责原则(Single Responsibility Principle), O-开闭原则(Open closed Princ ...

  2. 每天一学设计模式(一、单一职责原则)

    引言 本文参考以下这篇文章 https://blog.csdn.net/guorui_java/article/details/125947300 定义 单一职责原则(Single responsib ...

  3. 设计模式个人总结,单一职责原则总结

    总结经验 近期自学Unity引擎,学到了关于设计模式这一块,以前学习Java多次接触设计模式,也在应用的开发过程中频繁使用.虽然开发过程中没有特意去强调使用设计模式,但设计模式的使用总是潜移默化的,现 ...

  4. 设计模式(一)---单一职责原则

    单一职责原则:就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力.这种耦合会导致脆弱的设计,当变 ...

  5. 设计模式之禅(读后感悟随笔)-单一职责原则

    一直以来,自己读过的技术类书籍也不少了,但是都犯了一个毛病就是没有很好的记录下来,有些东西可能并不是平日开发中时时刻刻用到的,随着时间的延长,学过的东西慢慢也就淡忘了,刚好最近有些时间,也正打算把&l ...

  6. 设计模式|理解单一职责原则

    软件质量保障 专注测试圈,自动化测试.测试平台开发.测试新技术.大厂测试岗面经分享, 可以帮忙内推BATJ等大厂!欢迎加VX沟通交流: ISTE1024 很早想总结一些关于设计模式的文章了,回头看一下 ...

  7. 设计模式原则——单一职责原则

    前言   设计模式这部分我选择的书籍是一本叫做<设计模式之禅>的书,虽然内容可能不是特别友好,但是内容详尽有层次,一眼看去就可以大致了解整个结构.对于一门学问,有时候先从整体弄懂学习内容也 ...

  8. 围观设计模式(1)--单一职责原则(SRP,Single Responsibility Principle)

    沉寂了一个月的时间,仔细学习了下设计模式,从本篇博文开始陆续更新设计模式系列的文章,我给它起了个有意思的名字叫做:"围观"设计模式,当然围观是加引号的,我写博文分享的目的一方面是将 ...

  9. 前端中会用到的设计模式之单一职责原则

    1:设计模式应用不应用,取决于对现在和未来判断后的取舍.没必要用尽量不用! 2.设计模式的目的是  减少复杂度(一个函数中包含的功能个数), 降低耦合度(一个对象与其他对象的关系个数).耦合度不能为0 ...

最新文章

  1. frame,iframe,frameset之间的关系与区别
  2. Keras Theano 输出中间层结果
  3. js全局变量和局部变量
  4. HANA全面上市,成为SAP史上用户数量增长最快的产品之一
  5. 如何修改Series和DataFrame类型中的元素值_Redis的HSCAN命令中COUNT参数的失效场景
  6. [蓝桥杯][基础练习VIP]分解质因数
  7. python 元类 type_python Class:面向对象高级编程 元类:type
  8. plsql存过声明游标_plsql编程学习之游标一
  9. python显示日历_python显示日期
  10. Androidstudio抽取成员变量快捷键 快捷键大全 自定义setting文件
  11. win32项目--获取、修改计算机屏幕分辨率
  12. Linux中tar分卷压缩与解压缩
  13. <choose>标签的使用
  14. 史上最全推广小程序实操方法
  15. WCF基础教程(三)——WCF通信过程及配置文件解析
  16. gitlab代码提交自动触发Jenkins token发版(二)
  17. 【葡萄城报表案例分享】项目施工进度报告 – 树形报表
  18. 朴素贝叶斯——垃圾邮件过滤
  19. C语言计算圆柱的表面积 体积
  20. 鸟人的Android揭秘(3)——Android 编译环境搭建

热门文章

  1. jquery ui 主题_使用jQuery UI主题
  2. word打开老是配置进度_打开word2007时总是出现配置进度,怎么解决?
  3. windows10系统自带linux子系统(WSL)的安装目录
  4. SIMCOM AT指令大全
  5. 风险加权资产(RWA)分析管理系统
  6. 实验室家具系列之通风柜
  7. C numi和弓道 双指针(2020牛客寒假基础训练营1 )
  8. 18行的python快递查询
  9. 【PhpSpreadsheet】实现excel冻结列和行(即左右滚动时指定列和行固定不动)
  10. COGS 2211. [BZOJ3653]谈笑风生