美文网首页
设计模式入门1-- 单一职责原则SRP

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

作者: 卡布奇诺_flygrk | 来源:发表于2019-08-02 00:26 被阅读0次

    写在前面

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

    学习思路

    参考哲学三大问题:

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

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

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

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

    设计原则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

    相关文章

      网友评论

          本文标题:设计模式入门1-- 单一职责原则SRP

          本文链接:https://www.haomeiwen.com/subject/bebhdctx.html