当前位置:网站首页>接口隔离原则
接口隔离原则
2022-06-27 00:44:00 【华为云】
接口隔离原则(Interface Segregation Principle),简称ISP,定义
客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。
以上就是接口隔离原则的定义,换句简单的话来说,就是一个类,去实现一个接口的时候,不要去实现这个类根本不需要的方法。
案例:
假如一个厂家要生产一个电饭煲,在我们的认知中电饭煲有什么功能,比如说,电饭煲有煮饭模式、有煮粥模式、煲汤模式,当然不同的电饭煲根据它不同的价格,它们拥有的功能也大不相同。
现在有两款电饭煲,一款可以煮饭、煮粥,一款可以煮饭和煲汤,那用UML类图应该如何表示
看类图,因为电饭煲的接口,已经把所有电饭煲的功能都已经定义了,如果一个电饭煲要生产,那就去继承电饭煲的接口,但是这个电饭煲可能没有某些功能,比如JavaCooker只有煮饭和煮粥的功能,不能煮汤,但是他继承Cooker接口,必须把煮汤的接口也实现,那怎么办?返回null,如下
public interface Cooker { void cookRice(); void cookPorridge(); void cookSoup();}public class JavaCooker implements Cooker { @Override public void cookRice() { System.out.println("使用JavaCooker煮饭"); } @Override public void cookPorridge() { System.out.println("使用JavaCooker煮粥"); } @Override public void cookSoup() { }}public class PyCooker implements Cooker{ @Override public void cookRice() { System.out.println("使用PyCooker煮饭"); } @Override public void cookPorridge() { } @Override public void cookSoup() { System.out.println("使用PyCooker煮汤"); }}上面这种设计,就是和接口隔离相违背的,接口隔离原则规定,一个类如果去继承一个接口,那这些接口应该都是应该去实现的,而不是空着或者返回null,这样的写法,会在父类调用时,可能会调用到为空的子类,造成不可估计的后果。
那应该怎么去改造?
类图如下:
把应该电饭煲,所有功能,定义到一个接口,如果一个类需要什么功能,就去继承对应的接口,实现对应的方法。
接口隔离原则的意义:
接口隔离原则是为了避免接口的臃肿,如果把所有功能都集中到一个接口当中,随着产品功能不停的增加,接口内的功能也在增加,接口将会越来越臃肿,增加一个功能,每个实现这个接口的子类都得修改。
“接口隔离”其实就是定制化服务设计的原则。使用接口的多重继承实现对不同的接口的组合,从而对外提供组合功能—达到“按需提供服务”。 接口即要拆,但也不能拆得太细,这就得有个标准,这就是高内聚。接口应该具备一些基本的功能,能独一完成一个基本的任务。
边栏推荐
- Operating instructions and Q & A of cec-i China learning machine
- Keepalived 实现 Redis AutoFailover (RedisHA)12
- Law of Large Numbers
- Memcached Foundation
- Great vernacular with high concurrency (I)
- 解决u8glib只显示一行文字或者不显示的问题
- Review the old and know the new -- constant renewal at normal temperature
- Keepalived 实现 Redis AutoFailover (RedisHA)16
- Solution of idea hot start failure
- Count the logarithm of points that cannot reach each other in an undirected graph [classic adjacency table building +dfs Statistics - > query set optimization] [query set manual / write details]
猜你喜欢

气液滑环与其他滑环的工作原理有什么区别

滑环选型选购时需要注意的技巧

CH423要如何使用,便宜的国产IO扩展芯片

直播回顾 | 子芽&CCF TF:云原生场景下软件供应链风险治理技术浅谈

3 - wire SPI Screen Drive

在线文本数字识别列表求和工具
![寻找旋转排序数组中的最小值 II[经典抽象二分 + 如何破局左中右三者相等]](/img/75/05d5765588dfde971167fbc72e2aa8.png)
寻找旋转排序数组中的最小值 II[经典抽象二分 + 如何破局左中右三者相等]

Generate flow chart with code, and how to use markdown

IIS deploy static web site and FTP service

BootstrapBlazor + FreeSql实战 Chart 图表使用(2)
随机推荐
xml学习笔记
These 10 copywriting artifacts help you speed up the code. Are you still worried that you can't write a copywriting for US media?
memcached基础5
自定义类加载器对类加密解密
Central Limit Theorem
乔治·华盛顿大学 : Hanhan Zhou | PAC:多智能体强化学习中具有反事实预测的辅助价值因子分解
统一结果集的封装
Flutter series: flow in flutter
Interface test framework practice (I) | requests and interface request construction
Memcached foundation 1
Keepalived 实现 Redis AutoFailover (RedisHA)16
Lambda expression
微博评论高性能高可用架构
3-wire SPI screen driving mode
玩转OLED,U8g2动画,增长数字和随机三角形等
memcached基础3
疫情期间居家办公的总结体会 |社区征文
TopoLVM: 基于LVM的Kubernetes本地持久化方案,容量感知,动态创建PV,轻松使用本地磁盘
Custom class loader encrypts and decrypts classes
IIS 部署静态网站和 FTP 服务