欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

接口与插排之关系

程序员文章站 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

内容简陋了一点,显然手机电脑不是只有充电这一项行为的,但意思到了就行。这个插排,就好比一个接口:

  1. 身为一个接口,插排提高了可扩展性,可以适应不同的设备。
  2. 并且,插排提高了可修改性。如果末端的插座发生了改变,只需要调整插排的插头,与它连接的设备不需要因此改变插头的形状;这样就避免了因为插座发生变化,而*更换所有需要充电的设备的充电器这一惨剧。
  3. 而且,插排实现了组件之间的解耦。一个设备充电不会影响其他设备,而如果直接插在插座上,想要给另一个设备充电,就需要拔掉当前的设备。
  4. 此外,看到插排,就知道上面的设备在充电,并且有充电的功能;而具体每一个设备是怎么充电的,由各个设备自己实现,使用者并不关心(也不需要关心)它的内部实现,只需要知道调用插排的接口(其实就是接入)能充电就行。这个又同时体现出封装(不必了解内部实现)和多态(只需要知道这是一个能与插排相连的设备,就可以调用充电方法,并且每一个的充电过程并不一样)了。

还是很有意思的。

相关标签: Java 面向对象