加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

设计模式学习之——六大设计原则之一:单一职责原则

发布时间:2020-12-14 05:25:09 所属栏目:百科 来源:网络整理
导读:? 设计模式学习之——六大设计原则之一:单一职责原则 分类:?设计模式 2014-03-16 23:22 ? 280人阅读 ? 评论(0) ? 收藏 ? 举报 设计模式 ? ? 周末出去参加了一趟婚礼,趁着酒店休息时间以及路上时间,抽空看了下《设计模式之禅》这本书,讲解还是相当到位的
?

设计模式学习之——六大设计原则之一:单一职责原则

分类:?设计模式 ? 280人阅读? 评论(0)? 收藏? 举报
设计模式
? ? 周末出去参加了一趟婚礼,趁着酒店休息时间以及路上时间,抽空看了下《设计模式之禅》这本书,讲解还是相当到位的,让我这种小白也能初窥大概,趁机做了下笔记。在之后几篇文章中应该都能体现出来。
????嗯 顺便说一下:kindle 真是个好东西,拿着趁手,晚上座公交车,司机不开灯也能看。而且看书随时随地,大赞大赞。大部头的书终于不用放进书包了!!!
? ? 进入正题:
六大设计原则:
Single Responsibility Principle: 单一职责原则
Open Closed Principle: 开闭原则
Liskov Substitution Principle: 里氏替换原则
Law Of Demeter: 迪米特法则
Interface Segregation Principle: 接口隔离原则
Dependence Inversion Principle: 依赖倒置原则

单一职责原则:
定义:There should never be more than one reason for a class to change.
定义应该都能看懂,反正我这个大学四级都没过的都大概看懂了,哈哈
直接进入例子说明:


????? ? 电话类图:注:dial:拨通电话;chat:通话;hangup:挂电话

这么一个接口包含两个职责:协议管理(dial,hangup)和数据传送(chat)
这样看来,协议接通会引起这个接口或类的变化,数据传送也会引起这个接口或类的变化。
两个原因都引起了类的变化。但是!!这两个职责并不互相影响。所以说:拆分!!!
如下关系图(画图不好画啊,幸好有VS):



这么做,我们就实现了单一职责。但是这样会导致一个问题:该方式需要把ConnectionManager和DataTransfer组合在一起才能使用,组合是一种强耦合关系拥有共同生命期,而且增加了类的复杂性,多了两个类,不好不好。修改后如下:



完美:一个类实现两个接口,两个职责融合在了一个类中,虽然一个Phone有两个原因引起了变化,但是别忘记,我们是面向接口编程。公布的是接口而非实现类。

单一职责原则的优点:
a. 类的复杂性降低
b. 可读性提高
c. 可维护性提高
d. 变更引起的风险降低

注:单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”衡量接口或类设计得是否优良,但这些都是不可度量的,所以,我们需要因项目而异,因环境而异

单一职责原则同样适用于方法:即一个方法尽可能做一件事。
对于单一职责原因:接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读