做网站运营需要学的东西,做网站制作软件,免费制作图片生成器,兰州网站建设推荐q479185700顶上设计模式原则
设计模式示例代码库地址#xff1a;
https://gitee.com/Jasonpupil/designPatterns
接口隔离原则
要求程序员尽量将臃肿庞大的接口拆分为更小的和更具体的接口#xff0c;让接口中只包含客户感兴趣的方法接口隔离原则的目标是降低类或模块之间的耦合度…设计模式原则
设计模式示例代码库地址
https://gitee.com/Jasonpupil/designPatterns
接口隔离原则
要求程序员尽量将臃肿庞大的接口拆分为更小的和更具体的接口让接口中只包含客户感兴趣的方法接口隔离原则的目标是降低类或模块之间的耦合度提高代码的可维护性、可扩展性和可测试性。通过使用多个专门的接口我们可以避免类或模块之间出现不必要的依赖关系减少对无用接口的实现或调用从而降低了修改和维护的成本。
模式场景学校管理系统不同角色的功能
接口隔离原则替换前定义一个角色接口包含几个功能成绩查询、成绩上传和教师管理所有角色都实现了这个接口但是不同角色的权限不同只能使用对应权限的功能比如学生只能成绩查询而老师就可以成绩查询和成绩上传。如果都实现同一个接口还需要进行每个功能进行隔离比较麻烦。接口隔离原则替换后把角色功能接口根据每个功能进行拆分角色类实现对应权限的功能接口这样就简化了角色类里实现功能隔离。
接口隔离原则替换前示例代码功能没有具体实现主要看逻辑是怎么样
角色功能接口
/*** Description: 角色接口* Author: pupil* Date: 2024/06/26 下午 11:29*/
public interface Role {/*** 成绩查询* param userId 学生id* return*/String scoreInquiry(long userId);/*** 成绩上传* param userId 学生id* param grades 成绩*/void gradeUpload(long userId, MapString,Double grades);/*** 教师管理* param teacherId 教师id*/void teacherManagement(long teacherId);}校长类
/*** Description: 校长功能没有具体实现* Author: pupil* Date: 2024/06/26 下午 11:30*/
public class Principal implements Role {private Logger logger LoggerFactory.getLogger(Principal.class);Overridepublic String scoreInquiry(long userId) {logger.info(学生{}成绩是....,userId);return null;}Overridepublic void gradeUpload(long userId, MapString, Double grades) {// 无法实现该功能}Overridepublic void teacherManagement(long teacherId) {logger.info(教师{}: 进行管理,teacherId);}
}教师类
/*** Description: 教师* Author: pupil* Date: 2024/06/26 下午 11:31*/
public class Teacher implements Role {private Logger logger LoggerFactory.getLogger(Teacher.class);Overridepublic String scoreInquiry(long userId) {logger.info(学生{}成绩是....,userId);return null;}Overridepublic void gradeUpload(long userId, MapString, Double grades) {logger.info(学生{}成绩上传为{},userId,grades);}Overridepublic void teacherManagement(long teacherId) {// 无法实现该功能}
}学生类
/*** Description: 学生* Author: pupil* Date: 2024/06/26 下午 11:31*/
public class Student implements Role {private Logger logger LoggerFactory.getLogger(Student.class);Overridepublic String scoreInquiry(long userId) {logger.info(学生{}成绩是....,userId);return null;}Overridepublic void gradeUpload(long userId, MapString, Double grades) {// 无法实现该功能}Overridepublic void teacherManagement(long teacherId) {// 无法实现该功能}
}接口隔离原则替换后示例代码功能没有具体实现主要看逻辑是怎么样
成绩查询功能接口
/*** Description: 成绩查询功能接口* Author: pupil* Date: 2024/06/26 下午 11:56*/
public interface ScoreInquiry {/*** 成绩查询* param userId 学生id* return*/String scoreInquiry(long userId);
}成绩上传功能接口:
/*** Description: 成绩上传功能接口* Author: pupil* Date: 2024/06/26 下午 11:56*/
public interface GradeUpload {/*** 成绩上传* param userId 学生id* param grades 成绩*/void gradeUpload(long userId, MapString,Double grades);
}教师管理功能接口:
/*** Description: 教师管理功能接口* Author: pupil* Date: 2024/06/27 上午 12:01*/
public interface TeacherManagement {/*** 教师管理* param teacherId 教师id*/void teacherManagement(long teacherId);
}校长类
/*** Description: 校长功能没有具体实现* Author: pupil* Date: 2024/06/26 下午 11:30*/
public class Principal implements ScoreInquiry, TeacherManagement {private Logger logger LoggerFactory.getLogger(Principal.class);Overridepublic String scoreInquiry(long userId) {logger.info(学生{}成绩是...., userId);return null;}Overridepublic void teacherManagement(long teacherId) {logger.info(教师{}: 进行管理, teacherId);}}教师类:
/*** Description: 教师功能没有具体实现* Author: pupil* Date: 2024/06/26 下午 11:31*/
public class Teacher implements ScoreInquiry, GradeUpload {private Logger logger LoggerFactory.getLogger(Teacher.class);Overridepublic String scoreInquiry(long userId) {logger.info(学生{}成绩是....,userId);return null;}Overridepublic void gradeUpload(long userId, MapString, Double grades) {logger.info(学生{}成绩上传为{},userId,grades);}}学生类
/*** Description: 学生功能没有具体实现* Author: pupil* Date: 2024/06/26 下午 11:31*/
public class Student implements ScoreInquiry {private Logger logger LoggerFactory.getLogger(Student.class);Overridepublic String scoreInquiry(long userId) {logger.info(学生{}成绩是....,userId);return null;}
}根据接口隔离原则的示例类图