设计模式入门1-- 单一职责原则SRP

写在前面

一直想抽出一些时间来写一写博客,最近准备重拾那份决心,但是仔细思考了下却不知何入手。思来想去,觉得还是以设计模式为契机,可以很好的对自己的学习进行相应的总结,接下来的文章中,会有参考其他资料的部分,在此提醒一下,请各位同学理解。

学习思路

参考哲学三大问题:

  • 我是谁?
  • 我从哪里来?
  • 我要到哪里去?

当然,我们不会对各个设计模式问人类的问题,那么我们也带着三个问题去学习设计模式及其他的知识点:

  • 他是谁?
  • 他能干什么?
  • 他怎么使用?

接下来关于设计模式的总结,我将以这样的思路进行相关的表述,除此之外,也会对一些内容进行补充讲解,如有疑问及异议,请于博客下留言,我将与您共同探讨,我相信讨论会使两个人都有收益的!

设计原则1: 单一职责原则SRP

1、SRP是谁?

单一职责原则,简称SRP(Single responsibility principle),从其中文含义,我们就可以理解其所要表达的思想:职责(也就是功能)单一

备注一下: 其出自 罗伯特·C·马丁(Robert C. Martin)的《敏捷软件开发:原则、模式和实践》一书。

2、SRP能干什么?

SRP所要表述的思想是职责单一,那么也就是说一个类(或方法)不需要负责太多的职责,其只需要负责自己应该负责的某一职责即可!举个通俗的例子,以软件开发人员为例:后端软件开发人员只需要负责功能需求的开发即可,其不应该去进行UI和测试的工作(这里在现实中好像不可能)。

从上述例子可以看出:在现实中,很少有完全符合SRP的情况,包括在实际的软件开发中,如果某个类仅仅只负责一个职责,那似乎程序代码是如此的不可想象。

在SRP的思想基础上,我们应该要考虑的点不能完全限定于SRP的理论,我们需要注意以下几点:

  • 1、在定义对象职责时,需要充分考虑职责与对象之间的关系;
  • 2、职责需要很好的体现出对象的行为方式

3、SRP怎么使用?

3.1 不符合SRP的示例

来看下老师Teacher这个类,现在很多的高校老师一方面教书育人,另一方面处理党政事务,这其实是两种行为,但是在本例中均为教师担任,这是不符合SRP的原则的。

package top.flygrk.ishare.srp;

/**
 * @Classname: Teacher
 * @Description: 不符合SRP原则的示例
 * @Date: 2019/8/1 23:57
 * @Created by: flygrk
 */
public class Teacher {

    public void teachStudent() {
        System.out.println("老师教学生知识~");
    }

    public void handlePartyAffairs() {
        System.out.println("处理党政事务~");
    }

}

3.2 符合SRP原则的示例

以上述不符合SRP的原则的示例来修改,使其符合SRP原则,其实这很简单,在建立类别时,我们让教师只负责教书育人这种行为,将处理党政事务这种行为交由党员类别即可。

  • Teacher:
package top.flygrk.ishare.srp.accord;

/**
 * @Classname: Teacher
 * @Description: 符合SRP原则的示例
 * @Date: 2019/8/2 0:08
 * @Created by: flygrk
 */
public class Teacher {

    public void teachStudent() {
        System.out.println("老师教学生知识~");
    }

}
  • PartyMember:
package top.flygrk.ishare.srp.accord;

/**
 * @Classname: PartyMember
 * @Description: 符合SRP的示例
 * @Date: 2019/8/2 0:09
 * @Created by: flygrk
 */
public class PartyMember {

    public void handlePartyAffairs() {
        System.out.println("处理党政事务~");
    }

}

从上述示例也能看出,严格遵循单一职责原则SRP之后,各个类只负责单一的职责,类结构清晰。但是也存在一定的弊端。下面我们来总结一下其优缺点。

4、SRP的优点

  • 1、类的复杂性降低,实现什么职责都有清晰明确的含义;
  • 2、可读性提高
  • 3、可维护性提高
  • 4、变更代码引起的风险降低。如果接口的单一职责做的好,一个接口的修改只对相应的实现类有影响,对其他接口没有影响。

5、SRP的缺点

我们也可以认为其没有较为明显的缺点吧,在实际应用中,只是比较难以完全遵循SRP。

建议: 开发中,接口开发必须遵循SRP原则,类开发尽量遵循SRP原则。

补充点:

关于SRP的内容基本上就总结完毕了,关于SRP的知识点,需要在实践中进行体验。下面补充一些知识点内容:

  • 违反SRP的设计模式: 外观模式Facade、代理模式Proxy
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容