00_3面向对象设计原则-单一职责

单一职责:不要存在一个以上导致类变更的原因。 咱们简单的描述一下,假设有一个类负责两个职责,一旦发生需求变更,修改其中一个职责的逻辑代码,有可能会导致另一个职责的功能发生故障,这个类就存在两个导致类变更的原因。

我们来看个例子,我们的课程有直播课和录播课,直播课不能快进和快退,录播课可以任意地反复观看,功能职责不一样。来我们来看一下代码:

package org.test.design.principle.srp;

public class Course {
    public void study(String courseName) {
        if ("直播课".equals(courseName)) {
            System.out.println("不能快进");
        } else {
            System.out.println("可以任意地来回播放");
        }
    }
    //测试调用
    public static void main(String[] args) {
        Course course = new Course();
        course.study("直播课");
        course.study("录播课");
    }
}
我们来分析一下这部分代码,Course类承担了两个处理逻辑,如果,现在对课程进行加密,那么直播课和录播课的加密逻辑是不一样的,必须修改代码。而修改代码逻辑势必会相互影响,容易带来不可控的风险。我们对职责进行分离解耦,分别创建两个类LiveCourse和ReplayCourse。 LiveCourse.java
package org.test.design.principle.srp;

public class LiveCourse {
    public void study(String courseName) {
        System.out.println(courseName + "不能快进看");
    }
}
ReplayCourse.java
package org.test.design.principle.srp;

public class ReplayCourse {
    public void study(String courseName) {
        System.out.println(courseName + "可以任意地来回播放");
    }
}
创建测试调用:
package org.test.design.principle.srp;

public class SRPV2Test {
    public static void main(String[] args) {
        LiveCourse liveCourse=new LiveCourse();
        liveCourse.study("直播课程");

        ReplayCourse replayCourse=new ReplayCourse();
        replayCourse.study("录播课");

    }
}
代码在修改之后,开发起来简单,维护起来也容易。在实际项目中,代码会存在依赖、组合、耦合关系,在项目开发过程中还受到项目的规模、周期、技术人员水平、对进度的把控的影响,导致很多类都不能满足单一职责原则。但是,我们在编写代码的过程中,尽可能的让接口和方法保持单一职责,对项目后期的维护是有很大帮助的。
上一篇:openresty——安装 配置 使用


下一篇:linux下ACE的编译与安装