文档章节

设计原则--》单一职责原则

@ccny
 @ccny
发布于 2016/04/22 17:24
字数 430
阅读 41
收藏 0

如果一个类承担的职责过多,就等于把这些职责耦合在了一起。一个职责的变化可能削弱或者抑制这个类完成其他职责的能力。

这种耦合会导致脆弱的(fragile)设计,当变化时设计会遭受到意想不到的破坏。

什么是职责?

在SRP中,我们把职责定义为“变化的原因”。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。有时,我们很难注意到这一点。我们习惯于以组的形式去考虑职责。

Modem.java --违反SRP

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

然而,该接口中却显示出两个职责。第一个职责是连接管理;第二个职责是数据通信。dial和hangup函数进行调制解调器的连接处理,而send和recv 函数进行数据通信。

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


....

分离耦合的职责

。。。。

持久化

....

结论

SRP是所有原则中最简单的之一,也是最难正确运用的之一。我们自然地把职责结合在一起。

软件设计是真正要做的许多内容,就是发现职责并把那些职责相互分离。事实上,我们将要论述的其余原则都会以忱样或那样的方式回到这个问题上。



© 著作权归作者所有

共有 人打赏支持
@ccny

@ccny

粉丝 14
博文 113
码字总数 26759
作品 0
东城
架构师
私信 提问
设计原则-单一职责原则

单一职责原则是最简单的设计原则, 它用来控制类的粒度大小. 单一职责原则: 一个类只负责一个功能领域中的相应职责. (就一个类而言, 应该只有一个引起它变化的原因) 单一职责原则告诉我们, 一...

hell03W
2016/11/08
10
0
写了这么多年代码,你真的了解SOLID吗?

尽管大家都认为SOLID是非常重要的设计原则,并且对每一条原则都耳熟能详,但我发现大部分开发者并没有真正理解。要获得最大收益,就必须理解它们之间的关系,并综合应用所有这些原则。只有把...

ThoughtWorks中国
2018/09/12
0
0
PHP核心技术与最佳实践 读书笔记 第二章 面向对象的设计原则

第二章 面向对象的设计原则 2.1 面向对象设计的五大原则 单一职责原则 接口隔离原则 开放-封闭原则 替换原则 依赖倒置原则 2.1.1 单一职责原则SRP 单一职责有两个含义:一个是避免相同的职责...

lilugirl
2014/03/25
0
0
6大设计原则之1--单一职责原则

单一职责:Single Responsibility Principle(RSP),应该且仅有一个原因引起类的变更。(There should never be more than one reason for a class to change). 那么RSP有什么好处呢: 类的...

忆瑶
2015/12/30
118
0
设计模式六大原则(1):单一职责原则

定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致...

LCZ777
2014/06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

移植Modbus到STM32F103(2):移植FreeModbus到usart3并运行示例代码

FreeModbus是Modbus的一个被广泛移植的实现。其源码在github,最新版是1.6。 FreeModbus支持Modbus功能码里的0x01~0x06,0x0F~0x11和0x17,对一些功能比如异常诊断和读事件计数等功能码并没有...

Konstantine
今天
3
0
浅谈神经网络(神经网络篇)

背景 之前写过浅谈神经网络基础篇,简单介绍下机器学习这块内容,用于扫盲。本文正式将神经网络,这部分是深度学习的基础。了解完可以掌握强大的机器学习的方法,也可以更好的了解深度学习。...

Uknowzheng
今天
4
0
移动硬盘变为RAW格式后的修复

在Mac上使用自己的移动硬盘结果文件系统格式变为RAW; 在自己windows笔记本上使用chkdsk H: /F进行修复,修复日志如下: C:\Users\mengzhang6>chkdsk H: /F文件系统的类型是 NTFS。卷标是 do...

晨猫
今天
3
0
10 Git —— 标签管理

10 Git —— 标签管理 本节内容: 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;命令git......

lwenhao
今天
4
0
小程序设置垂直居中,水平居中

如果子容器中的view需要居中的话,那需要在父容器中设置居中 水平居中: display: flex; flex-direction: column; align-items: center; 垂直居中 display: flex;align-items: cen...

淘幻幻
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部