软件设计原则--单一职责原则 ╰+攻爆jí腚メ 2022-11-27 03:23 179阅读 0赞 > 单一职责 (Simple Responsibility Pinciple, SRP) 是指不要存在多于一个导致类变更的原因 * 降低类的复杂度, 提高类的可读性,系统的稳定性,降低修改风险 一个类如果负责两个职责,当需求发生变更,修改其中一个职责的逻辑时,可能会导致另一个职责功能发生意想不到的问题. 创建一个 Course 类, 体育课送一套护具,其他课程不送 public class Course { public void study(String courseName) { String sports = "体育课"; if (sports.equals(courseName)) { System.out.println(courseName + "送一套护具"); } else { System.out.println(courseName + "不送护具"); } } } 调用代码 public static void main(String[] args) { Course course = new Course(); course.study("体育课"); course.study("文化课"); } 可以看到,Course类承担了2种职责,如果需要对不同年龄的人员,设置不同的专门课程,体育课和文化课必然逻辑不同,而修改代码的逻辑也会彼此影响,容易出现意料之外的问题,如何解耦? 创建一个体育课程SportsCourse public class SportsCourse { public void study(String courseName) { System.out.println(courseName + "送一套护具"); } } 创建一个文化课程ArtCourse public class ArtCourse { public void study(String courseName) { System.out.println(courseName + "不送护具"); } } 调用代码 public static void main(String[] args) { SportsCourse sportsCourse = new SportsCourse(); sportsCourse.study("体育课"); ArtCourse artCourse = new ArtCourse(); artCourse.study("文化课"); } 业务新增, 新增权限功能, 没付费的,只能获取课程基本信息,加入讨论群, 付费用户,还可以获取课程付费内容,并可以申请退款 public interface ICourse { /** 获取免费信息*/ String getCourseBase(); /** 加入讨论群*/ void addGroup(); /** 获取付费信息*/ String getCourseDetails(); /** 退款*/ void refundCourse(); } 可以把这一个接口拆分为两个接口,免费的一个接口, 付费的一个接口 免费用户功能接口 public interface ICourseFree { /** 获取免费信息*/ String getCourseBase(); /** 加入讨论群*/ void addGroup(); } 付费用户功能接口 public interface ICoursePay { /** 获取付费信息*/ String getCourseDetails(); /** 退款*/ void refundCourse(); } 由于项目规模,周期,技术人员水平等原因, 很多类都不符合单一职责 但是,我们在编写代码过程中,应该尽可能的让接口和方法都保持单一职责,这对后续的维护会有很大的帮助
还没有评论,来说两句吧...