软件设计七大原则之单一职责原则

单一职责原则

单一职责原则的核心就是控制类的粒度大小、将对象解耦、提高其内聚性。

例1:大学学生工作管理程序。

分析:大学学生工作主要包括学生生活辅导和学生学业指导两个方面的工作,其中生活辅导主要包括班委建设、出勤统计、心理辅导、费用催缴、班级管理等工作,
学业指导主要包括专业引导、学习辅导、科研指导、学习总结等工作。
如果将这些工作交给一位老师负责显然不合理,正确的做法是生活辅导由辅导员负责,学业指导由学业导师负责。
uml图如下
在这里插入图片描述
三个类代码如下:

public interface Student {
    /***
     * 生活
     */
    void live(LiveTeacher teacher);

    /**
     * 学习
     */
    void learn(LearnTeacher teacher);
}

public interface LiveTeacher {
    void 班委建设();

    void 出勤统计();

    void 心理辅导();

    void 费用催缴();

    void 班级管理();
}

public interface LearnTeacher {
    void 专业引导();

    void 学习辅导();

    void 科研指导();

    void 学习总结();
}

例2:获取课程教程的权限

普通学员只能获得教程的基本信息,VIP 用户可以获得阅读权限。
所以在控制教程层面,至少有两个职责,我们可以把展示职责和管理职责分离开,都实现同一个抽象依赖。UML图如下
在这里插入图片描述

如果用一个课程类标识

public interface Course {
    //获取教程的基本信息
    String getCourseTitle();
    //获得阅读权限
    byte[] getReadPow();
    //学习教程
    void studyCourse();
    //退款
    void refundCourse();
}

职责分离后几个类如下

public interface CourseInfo {
    //获取教程的基本信息
    String getCourseTitle();
    //获得阅读权限
    byte[] getReadPow();
}
public interface CourseManager {

    //学习教程
    void studyCourse();
    //退款
    void refundCourse();

}
public class CourseImpl implements CourseInfo,CourseManager {
    @Override
    public String getCourseTitle() {
        return null;
    }

    @Override
    public byte[] getReadPow() {
        return new byte[0];
    }

    @Override
    public void studyCourse() {

    }

    @Override
    public void refundCourse() {

    }
}

参考资料:
1.http://c.biancheng.net/view/1327.html
代码地址:https://gitee.com/zhoujie1/design-mode-and-principle.git

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值