当前位置: 首页 > 科技观察

揭秘什么是面向接口编程

时间:2023-03-17 00:35:37 科技观察

先用一个案例给大家讲解一下面向接口编程。案例:有一堂计算机课(Computer)。除了基本的开机和关机功能外,电脑还具有连接任何外接设备的功能,例如电脑可以外接键盘(Keyboard)、鼠标(Mouse)、投影仪(Projector))和许多其他外部设备,请使用代码来实现此要求;实现步骤如下:首先,需要创建三个类Keyboard、Mouse、Projecter,分别是keyboard、mouse和projector,它们都有各自的功能。其次,需要创建一个Computer类,类中有openComputer方法和closeComputer方法,接收外部设备的方法有connectKeyboard、connectMouse、connectProjecter三个,代码如下://keyboardclasspublicclassKeyboard{publicvoidwork(){System.out.println("可以使用外接键盘输入数据");}}//鼠标类publicclassMouse{publicvoidwork(){System.out.println("鼠标方便操作者打开一些programs");}}//投影仪类publicclassProjecter{publicvoidwork(){System.out.println("投影仪将屏幕投影到墙上放大");}}//定义笔记本类//功能:开机,关机,接收外接设备,键盘,鼠标,投影仪等让它工作out.println("notebookpoweroff");}//连接外接键盘让它进入publicvoidconnectKeyboard(Keyboardk){k.work();}//连接鼠标让它点击publicvoidconnectMouse(Mousem){m.work();}//连接投影仪让它投影publicvoidconnectProjecter(Projecterp){p.work();}}现在我们完成了这个需求。但是如果这时候一些电脑配件厂商生产了一种新的外接设备“U盘”,那么这时候我们除了要写一个U盘类之外,还要在Computer类里面写。添加一个连接U盘的方法(这个体现在现实生活中就是把已经做好的电脑拆开重新装一个连接U盘的孔),添加的代码如下://U盘类publicclassUDisk{publicvoidwork(){System.out.println("U盘可以用来存储数据");}}//定义notebook类//功能:启动、关闭、接收外接设备、键盘、鼠标、投影仪并让它工作//连接外接键盘让它输入publicvoidconnectKeyboard(Keyboardk){k.work();}//连接鼠标让它点击publicvoidconnectMouse(Mousem){m.work();}//连接投影仪和letitprojectpublicvoidconnectProjecter(Projecterp){p.work();}//连接U盘,让它存储publicvoidconnectUDisk(UDisku){u.work();}}对于U盘的新设备,我们有修改电脑,使电脑可以连接使用。但可恨的是,这时候电脑配件厂家出了外接喇叭,我们又要拆机重新装个孔接外接喇叭,快要疯了。这时候我们并不急于改装自己的电脑,因为如果改装后电脑配件厂商生产出其他外接设备怎么办?还要继续修改吗?有解决办法吗?什么??答案是肯定的,接口的出现很好的解决了这个问题。我们给电脑配件厂商提供了一套叫USB的规格,告诉他们以后生产的任何设备都必须留有USB形的一对。接口,那么我们的电脑只需要预留一个USB形状的扩展坞端口,就可以连接任何这种形状的设备。USB设备publicclassComputer{//启动publicvoidopenComputer(){System.out.println("Laptoppoweron");}//关机publicvoidcloseComputer(){System.out.println("Laptoppoweroff");}//连接USB设备并让它相应地工作publicvoidconnectUSB(USBdevice){//父接口的引用可以接收任何子类对象,多态!device.work();//子类重写的work方法在这里运行}}//自定义USB接口//标准USB设备可以运行并完成相应的功能publicinterfaceUSB{publicabstractvoidwork();}//键盘类publicclassKeyboardimplementsUSB{publicvoidwork(){System.out.println("可以使用外接键盘输入数据");}}//鼠标类publicclassMouseimplementsUSB{publicvoidwork(){System.out.println("鼠标方便操作人员opensomeprograms");}}经过这样的设计,我们的电脑只需要预留一个docking接口用于连接USB设备,无论厂家生产什么外接设备,只要遵循USB接口规范,都可以连接到计算机上,大大增强了计算机的可扩展性和设备的可维护性。经过这个案例,大家应该明白面向接口编程给我们带来的便利了。面向接口编程是为了增强代码的可扩展性,接口是一种规范的体现,也是提现的一种扩展思路。