设计原则——接口隔离原则
1.全称
- Interface Segregation Principle
- 缩写为:
ISP
2.解释
- 要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法
- 单一职责原则注重的是职责,而接口隔离原则注重的是对接口依赖的隔离
- 单一职责原则主要是约束类,它针对的是程序中的实现和细节;接口隔离原则主要约束接口,主要针对抽象和程序整体框架的构建。
3.接口隔离原则的实现方法
1.场景
- 学生成绩管理程序一般包含插入成绩、删除成绩、修改成绩、计算总分、计算均分、打印成绩信息、査询成绩信息等功能
- 如果将这些功能全部放到一个接口中显然不太合理
- 比较合理的做法是将它们分别放在输入模块、统计模块和打印模块等 3 个模块中
输入模块
插入成绩
删除成绩
修改成绩统计模块
计算均分
计算均分打印模块
打印成绩信息
査询成绩信息
2.实现
class Student:def __init__(self, name, subject, score):self._name = nameself._subject = subjectself._score = score@propertydef name(self):return self._name@name.setterdef name(self, value):self._name = value@propertydef subject(self):return self._subject@subject.setterdef subject(self, value):self._subject = value@propertydef score(self):return self._score@score.setterdef score(self, value):self._score = valueclass StudentScoreManager:student_list = []def insert_score(self, student: Student):raise NotImplementedErrordef delete_score(self, student: Student):raise NotImplementedErrordef update_score(self, student: Student):raise NotImplementedErrordef calculate_average_score(self, student: Student):raise NotImplementedErrordef calculate_total_score(self, student: Student):raise NotImplementedErrordef print_score(self, student: Student):raise NotImplementedErrordef query_score(self, student: Student):raise NotImplementedErrorclass InputManager(StudentScoreManager):def insert_score(self, student):self.student_list.append(student)def delete_score(self, student):self.student_list.remove(student)def update_score(self, student):for stu in self.student_list:if student.name == stu.name and student.subject == stu.subject:stu.score = student.scorebreakclass StatisticsManager(StudentScoreManager):def calculate_average_score(self, student):sum_score = 0count = 0for stu in self.student_list:if student.name == stu.name:count += 1sum_score += stu.scorereturn sum_score / countdef calculate_total_score(self, student):sum_score = 0for stu in self.student_list:if student.name == stu.name:sum_score += stu.scorereturn sum_scoreclass OutputManager(StudentScoreManager):def print_score(self, student):for stu in self.student_list:if student.name == stu.name:yield f"姓名:{stu.name}, 科目:{stu.subject}, 成绩:{stu.score}"def query_score(self, student):for stu in self.student_list:if student.score == stu.score:yield f"姓名:{stu.name}, 科目:{stu.subject}, 成绩:{stu.score}"if __name__ == '__main__':s1 = Student("张三", "数学", 87)s2 = Student("张三", "语文", 76)s3 = Student("李四", "英语", 87)s4 = Student("李四", "英语", 87)im = InputManager()im.insert_score(s1)im.insert_score(s2)im.insert_score(s3)im.insert_score(s4)# InputManager类没有输出学生的功能(报错)# im.print_score()print('----------------输出张三的成绩----------------')om = OutputManager()result = om.print_score(s1)for score_info in result:print(score_info)print('----------------修改张三的语文成绩----------------')s5 = Student("张三", "语文", 89)im.update_score(s5)result = om.print_score(s1)for score_info in result:print(score_info)print('----------------查询成绩为87的学生信息----------------')for resp in om.query_score(s1):print(resp)print('----------------输出张三的总成绩----------------')sm = StatisticsManager()print(sm.calculate_total_score(s1))print('----------------输出李四的平均成绩----------------')sm = StatisticsManager()print(sm.calculate_average_score(s3))
----------------输出张三的成绩----------------
姓名:张三, 科目:数学, 成绩:87
姓名:张三, 科目:语文, 成绩:76
----------------修改张三的语文成绩----------------
姓名:张三, 科目:数学, 成绩:87
姓名:张三, 科目:语文, 成绩:89
----------------查询成绩为87的学生信息----------------
姓名:张三, 科目:数学, 成绩:87
姓名:李四, 科目:英语, 成绩:87
姓名:李四, 科目:英语, 成绩:87
----------------输出张三的总成绩----------------
176
----------------输出李四的平均成绩----------------
87.0
4.接口隔离原则的优点
1.将臃肿庞大的接口分解为多个粒度小的接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。
2.接口隔离提高了系统的内聚性,减少了对外交互,降低了系统的耦合性。
3.如果接口的粒度大小定义合理,能够保证系统的稳定性;但是,如果定义过小,则会造成接口数量过多,使设计复杂化;如果定义太大,灵活性降低,无法提供定制服务,给整体项目带来无法预料的风险。
4.使用多个专门的接口还能够体现对象的层次,因为可以通过接口的继承,实现对总接口的定义。
5.能减少项目工程中的代码冗余。过大的大接口里面通常放置许多不用的方法,当实现这个接口的时候,被迫设计冗余的代码。
设计原则——接口隔离原则相关推荐
- 【设计模式】软件设计七大原则 ( 接口隔离原则 | 代码示例 )
文章目录 一.接口隔离原则简介 二.接口隔离原则代码示例 ( 反面示例 ) 1.接口定义 ( 接口臃肿 ) 2.实现类 1 3.实现类 2 三.接口隔离原则代码示例 ( 推荐用法 ) 1.接口 1 2 ...
- 设计模式系列(二)七大设计原则-----接口隔离原则
七大设计原则之单一接口隔离原则 接口隔离原则 案例 应用实例 改进 上一篇:设计模式系列(一)七大设计原则-----单一职责原则 下一篇:设计模式系列(三)七大设计原则-----依赖倒转原则 接口隔离 ...
- 六大设计原则-接口隔离原则
1.开闭原则 2.接口隔离原则 3.依赖倒置原则 4.迪米特原则 5.里氏替换原则 6.单一职责原则 接口隔离原则 客户端不应该依赖它不需要的接口:一个类 ...
- 软件设计原则——接口隔离原则
客户端不应该被迫依赖于它不使用的方法: 一个类对另一个类的依赖应该建立在最小的接口上. [例]安全门案例 我们需要创建一个黑马品牌的安全门,该安全门具有防火.防水.防盗的功能. 可以将防火,防水,防盗 ...
- java设计模式之设计原则④接口隔离原则
定义: (1)用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口. (2)一个类对一个类的依赖应该建立在最小的接口上. (3)建立单一接口,不要建立庞大臃肿的接口. (4)尽量细化 ...
- 设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)
设计原则 单一职责原则(SRP) 从三大特性角度看原则: 应用的设计模式: 开放封闭原则(OCP) 从三大特性角度看原则: 应用的设计模式: 里氏替换原则(LSP) 从三大特性角度看原则: 应用的设计 ...
- Java七大设计原则 - 接口隔离原则
一.什么是 接口隔离原则 (Interface Segregation Principle) ? 原则含义: 一个类对于另外一个类的依赖应该建立在最小的接口上 1. 接口隔离原则" 实际上它 ...
- 设计模式原则 - 接口隔离原则(二)
接口隔离原则 一 官方定义 二 案例演示 普通方案 案例分析 解决方案 解决方案 案例总结 三 与单一职责原则对比 一 官方定义 接口隔离原则(Interface Segregation Princi ...
- 面向对象六大原则——接口隔离原则
什么是接口隔离原则(Interface Segregation Principle, ISP) 接口对于Java开发者来说都不陌生,它几乎存在于每一个Java程序中,是抽象的代名词.在讲接口隔离原则 ...
最新文章
- Paddington2
- YoloV5代码详细解读
- 静态Include和动态Include测试并总结
- php 自定义行间距,phpstorm 常见设置
- 联想一体机电源键不亮_联想电脑一体机B505拆机经验
- modbus与硬件对接Java_java中modbus协议连接
- redis 缓存过期默认时间_redis缓存过期机制
- 学习Duwamish7的MSDN说明及相关技术策略
- gentoo安装记录[20050216]
- Debian7桌面屏蔽图标和右键菜单的解决方法。
- Python基础——NaN(Not a Number)
- 深入剖析Redis主从复制
- Java学习手册:无符号左移无符号右移有符号右移
- yarn启动vue项目
- 关于软件测试未来发展趋势分析与总结
- 360一键root工具 v5.1.3 pc绿色版
- linux下gpt分区,Linux下的GPT分区
- 脚本小子_python数据类型代码
- 一、达梦数据库的安装
- layui中table表格内容过多自动换行