当前位置:网站首页>接口隔离原则
接口隔离原则
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,这样的写法,会在父类调用时,可能会调用到为空的子类,造成不可估计的后果。
那应该怎么去改造?
类图如下:
把应该电饭煲,所有功能,定义到一个接口,如果一个类需要什么功能,就去继承对应的接口,实现对应的方法。
接口隔离原则的意义:
接口隔离原则是为了避免接口的臃肿,如果把所有功能都集中到一个接口当中,随着产品功能不停的增加,接口内的功能也在增加,接口将会越来越臃肿,增加一个功能,每个实现这个接口的子类都得修改。
“接口隔离”其实就是定制化服务设计的原则。使用接口的多重继承实现对不同的接口的组合,从而对外提供组合功能—达到“按需提供服务”。 接口即要拆,但也不能拆得太细,这就得有个标准,这就是高内聚。接口应该具备一些基本的功能,能独一完成一个基本的任务。
边栏推荐
- 理想L9产品力分析:售价45.98万,采用四缸发动机,续航1315公里
- 世界很大,有人把二维码纹在脖子上
- LeetCode 142. Circular linked list II
- Unable to create a folder to save the sketch: MKDIR sketch
- Memcached foundation 4
- buuctf-pwn write-ups (6)
- memcached基础7
- memcached基础4
- Flink 实战问题(七):No Watermark(Watermarks are only available EventTime is used)
- Employment prospect of GIS and remote sensing specialty and ranking selection of universities in 2022
猜你喜欢

Statistical Hypothesis Testing

Amazon ElastiCache 飞速搭建缓存服务集群,这才叫快

乔治·华盛顿大学 : Hanhan Zhou | PAC:多智能体强化学习中具有反事实预测的辅助价值因子分解

使用NetworkX对社交网络进行系统的分析:Facebook网络分析案例

About Random Numbers

Esp32-solo development tutorial to solve config_ FREERTOS_ UNICORE problem

XSS攻击笔记(上)

One click acceleration of Sony camera SD card file copy operation, file operation batch processing tutorial

Buuctf PWN write UPS (6)

LeetCode 142. Circular linked list II
随机推荐
统一结果集的封装
memcached基础1
美团:踩雷好几年,才总结出的数据治理避坑攻略
xml学习笔记
buuctf-pwn write-ups (6)
Kept to implement redis autofailover (redisha) 17
ArcGIS 镶嵌数据集切片丢失问题处理
The world is very big. Some people tattoo QR codes on their necks
Memcached Foundation
One click acceleration of Sony camera SD card file copy operation, file operation batch processing tutorial
Record a bug caused by a line break
记录一次换行符引起的bug
Keepalived 实现 Redis AutoFailover (RedisHA)13
滑环选型选购时需要注意的技巧
超越锂电池——未来电池的概念
Kept to implement redis autofailover (redisha) 11
leetcode 1143. Longest common subsequence (medium)
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]
3 - wire SPI Screen Drive
memcached基础6