C#设计模式系列:单一职责原则(Single Responsibility Principle)
1、单一职责原则的核心思想
一个类应该有且只有一个变化的原因。
2、为什么要引入单一职责原则
单一职责原则将不同的职责分离到单独的类,每一个职责都是一个变化的中心。当需求变化时,这个变化将通过更改职责相关的类来体现。如果一个类拥有多于一个的职责,则这些职责就耦合到在了一起,那么就会有多于一个原因来导致这个类的变化。对于某一职责的更改可能会损害类满足其他耦合职责的能力。这样职责的耦合会导致设计的脆弱,以至于当职责发生更改时产生无法预期的破坏。
在SRP中,把职责定义为变化的原因。
3、单一职责原则的优点
1>、可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;
2>、提高类的可读性,提高系统的可维护性;
3>、变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。
4、单一职责原则实现
单一职责原则关键点要求接口的职责单一,从而实现该接口的类的职责单一。
5、单一职责原则重构
业务规则和持久化两个职责应该分开,业务规则往往会频繁变化,而持久化的方式却不会如此频繁的变化,并且变化的原因也是完全不同的。
对于违反这一原则的类需要进行重构,应用Façade模式或Proxy模式分离职责。
6、使用单一职责原则的注意点
1>、单一职责最难划分的就是职责。
2>、单一职责原则提出了一个编写程序的标准,用职责和变化原因来衡量接口或类设计的是否优良,但是职责和变化原因都是不可度量的,因项目而异,因环境而异。
3>、接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。
C#设计模式系列:单一职责原则(Single Responsibility Principle)的更多相关文章
- 面象对象设计原则之一:单一职责原则(Single Responsibility Principle, SRP)
单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小.单一职责原则定义如下:单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域 ...
- 设计模式六大原则(一):单一职责原则(Single Responsibility Principle)
单一职责(SRP)定义: 不要存在多于一个导致类变更的原因,通俗的说,即一个类只负责一项职责. 问题由来: 类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可 ...
- 单一职责原则(Single Responsibility Principle,SRP)
定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的 ...
- 01-01.单一职责原则(Single Responsibility)
1.基本介绍 对于类来说的,就是一个类,应该只负责一项职责(一个类只管一件事). 如类A负责两个不同职责:职责1,职责2. 当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解 ...
- 【设计模式】单一职责原则(SRP)
单一职责原则是面向对象原则五大原则中最简单,也是最重要的一个原则, 他的字面定义如下: 单一职责原则(Single Responsibility Principle, SRP): 一个类只负责一个功能 ...
- 北风设计模式课程---单一职责原则(Single Responsibility Principle)
北风设计模式课程---单一职责原则(Single Responsibility Principle) 一.总结 一句话总结: 一个类应该有且只有一个变化的原因:单一职责原则(SRP:Single Re ...
- 深入浅出系列第一篇(设计模式之单一职责原则)——从纯小白到Java开发的坎坷经历
各位看官大大们,晚上好.好久不见,我想死你们了... 先说说写这个系列文章的背景: 工作了这么久了,每天都忙着写业务,好久没有好好静下心来好好总结总结了.正好这段时间公司组织设计模式的分享分,所以我才 ...
- 设计模式之单一职责原则(SRP)
自己之前写过一些关于设计模式的博客,但是大部分都写得比较匆忙.现在正好趁年前有时间,笔者打算好好地整理一下自己这块知识结构.开篇的第一个原则就是设计原则里面最简单的一个原则--单一职责原则. 想必大家 ...
- 设计模式之单一职责原则(iOS开发,代码用Objective-C展示)
单一职责原则:就一个类而言,应该只有一个引起它变化的原因. 在iOS开发中,我们会很自然的给一个类添加各种各样的功能,比如随便写一个简单的应用程序,一般都会生成一个viewController类,于是 ...
- JAVA设计模式之单一职责原则
概念: 就一个类而言应该只有一个因其他变化的原因. 流程: 问题由来:设类或接口类C负责两个不同不同的职责:职责T1,职责T2.当由于职责T1需求改变进而需要修改类C时,可能导致职责T2收到不可预知的 ...
随机推荐
- iterm2
Mac下配置iterm2 http://www.dreamxu.com/mac-terminal/ 快捷键 http://cnbin.github.io/blog/2015/06/20/iterm2- ...
- Ancient Printer[HDU3460]
Ancient Printer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Tot ...
- Asp.net 配置web.Config 在出错时跳转到相应页面
<!--<customErrors mode="On" defaultRedirect="error.aspx"> <erro ...
- 非交织YUV格式转换
本文为自己写的从非交织yuv420转换出yuv444,yuv422h,yuv422v和手动裁剪422h,422v图片的代码 #include <fcntl.h> #include < ...
- Xpath基础语法学习
背景: 之所以学习Xpath,是因为在学习selenium定位页面元素,总是定位不到元素.为了更好的开展自动化测试,先学习下Xpath. 一:Xpath是什么. 1:Xpath是一门在XML文档中查找 ...
- appium的几点总结
原文链接:http://blog.csdn.net/bear_w/article/details/50345283 1. 建立session时常用命令: DesiredCapabilities cap ...
- mysql单列去重复group by分组取每组前几条记录加order by排序
mysql分组取每组前几条记录(排名) 附group by与order by的研究,需要的朋友可以参考下 --按某一字段分组取最大(小)值所在行的数据 复制代码代码如下: /* 数据如下: name ...
- WDM驱动加载方式理解
当PC得知有新设备插入时,总线驱动会创建相应的物理驱动PDO,然后提示有新设备插入,这时候调用相应Driver的AddDevice方法创建功能驱动FDO 下面是一个典型的AddDevice方法 #pr ...
- eclipse 中的注释 快捷键
(1)Ctrl+Space 说明:内容助理.提供对方法,变量,参数,javadoc等得提示, 应运在多种场合,总之需要提示的时候可先按此快捷键. 注:避免输入法的切换设置与此设置冲突 (2)Ctrl ...
- C#线程入门---转载
C#中的线程(一)入门 文章系参考转载,英文原文网址请参考:http://www.albahari.com/threading/ 作者 Joseph Albahari, 翻译 Swanky Wu 中 ...