接口与插排之关系
程序员文章站
2022-06-07 20:07:06
...
今天有人问我接口的意义,其实接口的意义很明确,主要是为了增强扩展性和修改性,降低耦合度,一旦需求发生变化,只需要修改一次。而且接口也是对类之间关系的一个有益的补充,可以进一步实现多态。并且,接口是一种规范,一种契约,实现了某个接口,也就实现了对应的方法,相当于具有了某种身份;看到一个接口,就知道这个类有相对应的功能,提高了可读性。
但是又回到了那个问题,为什么呢?
好处确实是有,但是泛泛而谈显然让人体会不到,而这个问题确实也把我问住了。去网上查了一堆资料,顺便问了老师,所说的各种好处也无非集中在规范和多态上,各种动物的例子也只是隔靴搔痒,并没有彻底解答这个问题。
为什么呢?
晚上给电脑充电的时候,我突然想到,这插排,不就是接口的例子吗?于是,我写了这么一个小程序,模拟了一下用插排充电的过程:
// PowerStripDevices.java
public interface PowerStripDevices {
void charge(String volt);
}
// Computer.java
public class Computer implements PowerStripDevices {
@Override
public void charge(String volt) {
System.out.println("Computer use " + volt);
}
}
// MobilePhone.java
public class MobilePhone implements PowerStripDevices {
@Override
public void charge(String volt) {
System.out.println("Mobile phone use " + volt);
}
}
// Test.java
public class Test {
public static void main(String[] args) {
PowerStripDevices[] devices = { new Computer(), new MobilePhone() };
for (PowerStripDevices device : devices) {
device.charge("220V");
}
}
}
// Computer use 220V
// Mobile phone use 220V
内容简陋了一点,显然手机电脑不是只有充电这一项行为的,但意思到了就行。这个插排,就好比一个接口:
- 身为一个接口,插排提高了可扩展性,可以适应不同的设备。
- 并且,插排提高了可修改性。如果末端的插座发生了改变,只需要调整插排的插头,与它连接的设备不需要因此改变插头的形状;这样就避免了因为插座发生变化,而*更换所有需要充电的设备的充电器这一惨剧。
- 而且,插排实现了组件之间的解耦。一个设备充电不会影响其他设备,而如果直接插在插座上,想要给另一个设备充电,就需要拔掉当前的设备。
- 此外,看到插排,就知道上面的设备在充电,并且有充电的功能;而具体每一个设备是怎么充电的,由各个设备自己实现,使用者并不关心(也不需要关心)它的内部实现,只需要知道调用插排的接口(其实就是接入)能充电就行。这个又同时体现出封装(不必了解内部实现)和多态(只需要知道这是一个能与插排相连的设备,就可以调用充电方法,并且每一个的充电过程并不一样)了。
还是很有意思的。
上一篇: 华为鸿蒙OS来了:开发者大会上见