java内功修炼-单一职责原则案例分析

java内功修炼-单一职责原则案例分析

设计原则是一种规范,是所有的设计模式设计思想都必须要遵守的规范。
七大原则不仅适用于java语言,在代码语言界基本通用。它来源于建筑设计,来源于生活。
来聊聊最简单的单一职责原则,如果您想跟着我学,请关注我,我们一起进步。
单一职责原则,是编程者修炼过程必须要掌握的七大设计原则之一。
单一职责原则(Single Responsibility Principle,简称SRP)是指一个类或者模块应该有且只有一个改变的原因,即一个类或者模块只负责一项职责。这样可以降低类或者模块的复杂度,提高代码的可读性和可维护性,降低变更引起的风险。
案例分析:
有一个学生类(Student),用来表示学生的信息和行为。我们可以设计一个如下的类:
// 没有遵循单一职责原则的学生类
public class Student {
private String id; // 学号
private String name; // 姓名
private String gender; // 性别
private double score; // 成绩

public Student(String id, String name, String gender, double score) {
this.id = id;
this.name = name;
this.gender = gender;
this.score = score;
}

public void study() {
// 学习的逻辑
}

public void takeExam() {
// 考试的逻辑
}

public void printReport() {
// 打印成绩单的逻辑
}

public void saveToDatabase() {
// 保存到数据库的逻辑
}
}
这个类的职责有四个:学习考试打印成绩单保存到数据库
这样的设计违反了单一职责原则,因为这个类有多于一个的改变的原因。
例如,如果我们要修改打印成绩单的逻辑,可能会影响到保存到数据库的逻辑,或者如果我们要修改数据库的结构,可能会影响到学生类的其他功能。
为了遵循单一职责原则,我们可以将学生类的职责分离到不同的类中,每个类只负责一个具体的职责。
例如,我们可以设计一个学生信息类(StudentInfo),一个学生行为类(StudentBehavior),一个成绩单类(Report)和一个数据库操作类(DatabaseOperation)。
代码如下:
// 遵循单一职责原则的学生信息类
public class StudentInfo {
private String id; // 学号
private String name; // 姓名
private String gender; // 性别
private double score; // 成绩

public StudentInfo(String id, String name, String gender, double score) {
this.id = id;
this.name = name;
this.gender = gender;
this.score = score;
}

// 省略getters和setters
}

// 遵循单一职责原则的学生行为类
public class StudentBehavior {
private StudentInfo studentInfo; // 学生信息

public StudentBehavior(StudentInfo studentInfo) {
this.studentInfo = studentInfo;
}

public void study() {
// 学习的逻辑
}

public void takeExam() {
// 考试的逻辑
}
}

// 遵循单一职责原则的成绩单类
public class Report {
private StudentInfo studentInfo; // 学生信息

public Report(StudentInfo studentInfo) {
this.studentInfo = studentInfo;
}

public void printReport() {
// 打印成绩单的逻辑
}
}

// 遵循单一职责原则的数据库操作类
public class DatabaseOperation {
private StudentInfo studentInfo; // 学生信息

public DatabaseOperation(StudentInfo studentInfo) {
this.studentInfo = studentInfo;
}

public void saveToDatabase() {
// 保存到数据库的逻辑
}
}
在这种设计中,我们将学生类的职责分解为四个独立的类,每个类只关注自己的功能,不影响其他类的功能。
这样,当我们需要修改某个类的逻辑时,不会对其他类造成影响,也不会增加系统的复杂性和维护成本。
所以,当我们在写代码或设计功能时,当你想用大量的 if else 代码块时,首先想想是不是该用单一职责原则的规范来重构代码了。不仅类的职责要分明,方法的职责也要分明。
1)降低类的复杂度,一个类只负责一项职责。
2)提高类的可读性,可维护性
3)降低变更引起的风险
4)通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责。

原文始发于微信公众号(小核桃编程):java内功修炼-单一职责原则案例分析

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/216067.html

(0)
李, 若俞的头像李, 若俞

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!