设计模式学习--面向对象的5条设计原则之单一职责原则--SRP

一、SRP简介(SRP--Single-Responsibility Principle):

就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因。

所谓职责,我们可以理解他为功能,就是设计的这个类功能应该只有一个,而不是两个或更多。也可以理解为引用变化的原因,当你发现有两个变化会要求我们修改这个类,那么你就要考虑撤分这个类了。因为职责是变化的一个轴线,当需求变化时,该变化会反映类的职责的变化。

“就像一个人身兼数职,而这些事情相互关联不大,,甚至有冲突,那他就无法很好的解决这些职责,应该分到不同的人身上去做才对。”

二、举例说明:

违反SRP原则代码:  modem接口明显具有两个职责:连接管理和数据通讯;

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

如果应用程序变化影响连接函数,那么就需要重构:

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

三、SRP优点:

消除耦合,减小因需求变化引起代码僵化性臭味

四、使用SRP注意点:

1、一个合理的类,应该仅有一个引起它变化的原因,即单一职责;  2、在没有变化征兆的情况下应用SRP或其他原则是不明智的;  3、在需求实际发生变化时就应该应用SRP等原则来重构代码;  4、使用测试驱动开发会迫使我们在设计出现臭味之前分离不合理代码;  5、如果测试不能迫使职责分离,僵化性和脆弱性的臭味会变得很强烈,那就应该用Facade或Proxy模式对代码重构;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏星流全栈

什么是「设计模式」?

953
来自专栏杨建荣的学习笔记

从设计模式的设计原则感悟生活(r2笔记42天)

设计模式中的很多思想还是很有意思的,刚毕业的时候接触设计模式感觉有点高深,坐而论道,感觉还是有些虚,平时做的小练习还能自己捣鼓一番,自己使用一下设计模式,然后大...

3186
来自专栏前端布道

JavaScript设计模式与开发实践 - 策略模式

引言 本文摘自《JavaScript设计模式与开发实践》 在现实中,很多时候也有多种途径到达同一个目的地。比如我们要去某个地方旅游,可以根据具体的实际情况来选择...

3588
来自专栏UML

维恩图 (Venn Diagram) 示例:UML vs. SysML

维恩图是集合之间以及共享某些共同点的对象组之间关系的图示。有时,维恩图被用作视觉头脑风暴工具,用于比较和对比两种(有时是三种或更多种)不同的东西。比较是看事物的...

1466
来自专栏java达人

现实生活中的SOLID原则

作者:Erik Dietrich 译者:java达人 来源:https://www.infragistics.com/community/blogs/erikd...

1668
来自专栏跨界架构师

[译文]Domain Driven Design Reference(四)—— 柔性设计

  要让一个项目加速发展,而不是被其自身的历史包袱所拖累,需要一个能与之良好协作的设计,它会带来改变。一个柔性设计。

572
来自专栏Crossin的编程教室

【Python 第49课】 面向对象(3)

面向对象是比较复杂的概念,初学很难理解。我曾经对人夸张地说,面向对象是颠覆你编程三观的东西,得花上不少时间才能搞清楚。我自己当年初学Java的时候,也是折腾了很...

2474
来自专栏24K纯开源

ChartDirector应用笔记(一)

ChartDirector介绍 ChartDirector是一款小巧精细的商业图表库。其适用的语言范围非常广泛,包括.Net, Java, Asp, VB, ...

1867
来自专栏JAVA高级架构

我是怎样教媳妇面向对象编程的

简介 我老婆 Farhana 想要继续软件开发生涯(之前因为我们的第一个孩子出生,她不得不放弃)。我已经有了一些软件设计和开发的经验,所以这几天我就在试着帮助她...

2448
来自专栏令仔很忙

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

      就一个类而言,应该仅有一个引起它变化的原因。通俗的说,一个类只负责一项职责。

501

扫描关注云+社区