内聚性:一个模块的组成元素之间的功能相关性。
就一个类而言,应该仅有一个引起它变化的原因。
当需求变化时,该变化会反映为类的职责的变化,如果一个类承担了多于一个的职责,那么引起它变化的原因就会有多个。
如果一个类承担的职责过多,就等于把这些职责耦合在一起。一个职责的变化可能会削弱或抑制这个类完成其他职责的能力。
这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。

什么是职责?
在SRP中,吧职责定义为“变化的原因”。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个职责。有时,很难注意到这一点,我们习惯于以组的形式去考虑职责。
Modem接口,大多数人认为这个接口非常合理:

public interface Modem {
public void dial(String pno); public void hangup(); public void send(char c); public void recv();
}

然而,该接口却显示两个职责(1)连接管理(2)数据通信。
dial和hangup连接处理,send和recv数据通信
这两个职责应该被分开吗?这依赖于应用程序变化的方式。如果应用程序的变化会影响连接函数的签名,那么这个设计就具有僵化性的臭味,因为send和recv的类必须要重新编译。
在这种情况下,这两个职责应该被分离,这样做避免了客户程序和这两个职责耦合在一起。

interface DataChannel {
public void send(char c); public void recv();
} interface Connection {
public void dial(String pno); public void hangup();
}

另外,如果应用程序的变化方式总会导致这两个职责同时变化,那么久不必分离它们,实际上,分离它们就会具有不必要的复杂性的臭味。

总结
SRP是所有原则中最简单的之一,也是最难正确运用的之一。软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。

  

  

单一职责原则(SRP)的更多相关文章

  1. C#软件设计——小话设计模式原则之:单一职责原则SRP

    前言:上篇C#软件设计——小话设计模式原则之:依赖倒置原则DIP简单介绍了下依赖倒置的由来以及使用,中间插了两篇WebApi的文章,这篇还是回归正题,继续来写写设计模式另一个重要的原则:单一职责原则. ...

  2. 电商架构设计-通过系统和业务拆分,遵循单一职责原则SRP,保障整个系统的可用性和稳定性

    个人观察 1.通过系统和业务拆分,遵循单一职责原则SRP,保障整个系统的可用性和稳定性. 2.单一职责原则SRP,真的很关键,广大程序员需要不断深入理解这个原则. 3.架构图是架构师的重要输出,通过图 ...

  3. 架构师之路——单一职责原则SRP (我单纯,我快乐)

    定义: 不要存在多于一个导致类变更的原因.通俗地讲,一个类只做一件事情.   单一职责原则的好处: 1.类的复杂性降低,实现什么职责都有清晰明确的定义: 2.可读性提高,复杂性降低,那当然可读性提高了 ...

  4. 【设计模式】单一职责原则(SRP)

    单一职责原则是面向对象原则五大原则中最简单,也是最重要的一个原则, 他的字面定义如下: 单一职责原则(Single Responsibility Principle, SRP): 一个类只负责一个功能 ...

  5. 【面向对象设计原则】之单一职责原则(SRP)

    单一职责原则是面向对象原则五大原则中最简单,也是最重要的一个原则, 他的字面定义如下: 单一职责原则(Single Responsibility Principle, SRP): 一个类只负责一个功能 ...

  6. 面向对象的六大原则之 单一职责原则——SRP

    SRP = Single Responsibility Principle   定义:就一个类而言,应该只有一个能引起他变化的原因.通俗的说,即一个类只负责一项职责.   作用: 1.减少了类之间的耦 ...

  7. 设计模式值六大原则——设计模式之六大原则——单一职责原则(SRP)

    定义: 应该有且仅有一个原因引起类的变更. There should never be more than one reason for a class to change. 优点: 1.类的复杂性降 ...

  8. 单一职责原则SRP

    定义: There should nerver be more then one reason for a class to change. 优点: 1.类的复杂性降低,实现什么职责都有清晰明确的定义 ...

  9. 2单一职责原则SRP

    一.什么是单一职责原则 单一职责原则(Single Responsibility Principle ): 就一个类而言,应该仅有一个引起它变化的 原因. 二.多功能的山寨手机 山寨手机的功能: 拍照 ...

  10. IOS设计模式的六大设计原则之单一职责原则(SRP,Single Responsibility Principle)

    定义 就一个类而言,应该仅有一个引起它变化的原因. 定义解读 这是六大原则中最简单的一种,通俗点说,就是不存在多个原因使得一个类发生变化,也就是一个类只负责一种职责的工作. 优点 类的复杂度降低,一个 ...

随机推荐

  1. Git使用整理

    [本文由水木桶首发于博客园,原文地址:https://www.cnblogs.com/shuimutong/p/11404664.html,未接允许,严禁转载] 背景 很久之前使用的是svn,直接在E ...

  2. mysql如何让有数据的表的自增主键重新设置从1开始连续自增

    项目开发中,有些固定数据在数据表中,主键是从1自增的,有时候我们会删除一些数据, 这种情况下,主键就会不连续.如何恢复到像第一次插入数据一样主键从1开始连续增长, 这里我找到一种解决方法: 如上面一张 ...

  3. AutoMapper 初次使用心得

    本例以asp.net webform为例: 结构: 主要代码:AutoMapperConfig 类 public class AutoMapperConfig { public static void ...

  4. Linux下用的脚本

    http://blog.itpub.net/29510932/viewspace-1166603/ 批量启动Tomcat 点击(此处)折叠或打开 #!/bin/bash #JDK路径 export J ...

  5. mysql FORMAT() 格式化后的数字运算出错

    原文链接 FORMAT()  之后   会满三位加逗号, 在此基础上进行数字运算的时候会出现预料之外的结果, 建议使用 : convert(param, decimal(12,2)) cast(par ...

  6. uc/xi

    一个较为通用的定义为:嵌入式系统是对对象进行自动控制而使其具有智能化并可嵌入对象体系统中的专用计算机系统. 实时性:目前,嵌入式系统广泛应用于生产过程控制.数据采集.传输通信等场合,这些应用的共同特点 ...

  7. flask-sqlalchemy用法详解

    一. 安装 $ pip install flask-sqlalchemy 二. 配置 配置选项列表 : 选项 说明 SQLALCHEMY_DATABASE_URI 用于连接的数据库 URI .例如:s ...

  8. 使用Cloudera Manager搭建Impala环境

    使用Cloudera Manager搭建Impala服务 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用CM安装Imapala 1>.进入CM的服务安装向导 2> ...

  9. ymPrompt简介

    ymPrompt从最简单的1.0版本到现在的4.0版本,代码共经历了四次较大的改动,组件在功能上有了很大的改进,应用灵活度更大,可应用环境的环境更加广泛,特别在4.0版本中加入对遮罩显示隐藏.按钮/图 ...

  10. abp学习(四)——根据入门教程(aspnetMVC Web API进一步学习)

    Introduction With AspNet MVC Web API EntityFramework and AngularJS 地址:https://aspnetboilerplate.com/ ...