设计模式学习--面向对象的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 条评论
登录 后参与评论

相关文章

来自专栏Java学习网

你需要每天写代码吗?

你需要每天写代码吗? 就像运动员每天锻炼一样,每天练习写代码可以成就更优秀的你。 最近我看过的博客,基本上每篇都有提到,“你需要每天写代码”。什么主题不重要,关...

2657
来自专栏人称T客

微软何时不再“阳萎” 看Nadella上任一年后憋了哪些大招

微软新任CEO Satya Nadella去年上任时,祭出“移动至上,云端优先”(mobile first and cloud first)的新政策,至今抛出了...

3795
来自专栏小白课代表

从今天起,再也不愁找不到想要的APP了——酷安

1993
来自专栏SDNLAB

【双语频道】ONOS架构原理

The purpose of this ONOS talk is to convey the rationale behind our approach to ...

3259
来自专栏未闻Code

任务管理,项目管理和目标管理

我是一个工具控,经常尝试各种生产力工具。我发现任务管理App汗牛充栋,项目管理工具乏善可陈,而目标管理App更是少得可怜。

1271
来自专栏python3

python简介

1.系统编程:提供API(Application Programming Interface,应用程序编程接口),能方便地进行系统维护和管理,Linux下标志性...

722
来自专栏SAP梦心的SAP分享

【域控管理】域控的必要性

题记:本来域控这玩意儿跟我没有半毛钱关系,毕竟我是做应用类的,域控纯属系统管理范畴。 以前在TTE和LDS,公司里有使用域控,几年来以使用者的角度在观察,觉得这...

2345
来自专栏高性能分布式系统设计

从历史看未来,大规模微服务系统的困境----基于消息的架构的回归

在大规模分布式系统的架构上,微服务系统是现在很多大型互联网公司的架构方向。 这是一个务实的很好的方向,相对于旧的宏服务来说。 然而,像淘宝这种规模的系统,微服务...

3275
来自专栏人工智能的秘密

开发一个智能客服需要多少钱?

现在很多网站的客服人员都会采用智能的聊天机器人回复客户的咨询问题,那如果要开发一个这样的聊天机器人,需要花费多少钱?

3690
来自专栏斑斓

回眸Unix设计哲学

我觉得一切伟大的设计似乎都是不朽的,例如矗立在雅典卫城石灰岩山岗上的帕特农神庙,米开朗基罗刀工斧凿下充满雄性魅力的大卫,毕达哥拉斯对勾股定理的演绎证明,乱臣贼子...

3196

扫码关注云+社区