面向对象原则之一 单一职责原则

原文: 面向对象原则之一 单一职责原则

前言

面向对象有人分为五大原则,分别为单一职责原则、开放封闭原则、依赖倒置原则、接口隔离原则、里氏替换原则。

也有人分为六大原则,分别为单一职责原则、开放封闭原则、依赖倒置原则、接口隔离原则、里氏替换原则、迪米特法则。

 

现在我们来介绍单一职责原则

 

单一职责原则

1)概念

按照官方说明,单一职责原则是指 应该有且只有一个一个原因引起类的变更。

通俗一点来说,一个类应该只做一类事情;一个类应该只负责一个功能。

单一职责原则是程序设计高内聚、低耦合的引申。

2)浮想联偏

作者接触单一职责原则的时候,以为很简单。单一职责嘛,一个类一个方法,不就是它的终极目标吗?

的确,这属于‘终极目标’但是此终极目标不现实。因为,一个类一个方法的确是高内聚、低耦合。但是这显然显得代码很臃肿了,维护更加不便,在中大型的项目更加如此。如果你的项目足够简单,类足够少,也可以这么来做。

所以,这里要强调一点的是,单一职责原则是一个类处理一类事情,也只有一类事情影响到这个类。并不是一个类处理一个方法。

3)开始理解

我们来举个例子。作者眼前有一支黑色笔,拿这支笔来做例子吧。

笔有它属性、被动的行为。属性有:黑色、手感好、笔尖0.5。行为有:写字、画画、扎人。当然,这里的扎人只是个例子,千万不要来真的了 >. <

按照一般的做法,我们都把笔的属性与行为都放在一个类来做。单一职责现在就起作用了,我们要分开成属性与行为。

来上UML图:

首先按照一般的设计:

image

一般一个接口、一个类来处理笔的各种事情,上面的图充分解析了这种说法,也是平常人设计的类。

下面,我们按照单一职责原则,来设计笔的属性、行为来隔离开,如下:

image

从上图看出,我们把行为以及属性动作分离开。

举了这个例子,我们看出一件事情,可以分离开多件事情的处理,从而提高了软件设计的高内聚、低耦合。

但是,我们从上面的例子,可以在分一下笔的行为。因为画画、写字是笔在纸上做的动作,而扎人是笔在人上做的动作。

更通俗地说,就是画画这个动作要发生改变的话,扎人这个动作应该不会受影响,所以扎人应该放到另外一个类中做处理。

下面我们可以更深一层地理解一下这个笔的动作可以分解成2个。

4)更深一层地理解

按照上面说的,我们可以把笔的动作分成两种,一种在纸上做的,一种是在人上做的。

为什么可以分开这两种,因为上面说了,一种在纸上做,一种在人上做。在纸上做只影响在纸张的类,在人上做只影响在人生的类。互不干扰。

我们上一下UML图吧:

image

 

到此结束了,下面有空再修改与补充。

 

其他链接:

开放封闭原则(开闭原则)

单一职责原则

依赖倒置原则

接口隔离原则

里氏替换原则

迪米特法则

 

此文转发,请注明出处,谢谢。

 

posted on 2019-01-03 23:28 NET未来之路 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/10217555.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值