单一职责原则
单一职责原则的核心就是控制类的粒度大小、将对象解耦、提高其内聚性。
例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