您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

什么是面向接口编程

时间:2020-07-23 10:23:39  来源:  作者:

先用一个案例来给大家说明一下面向接口编程

案例:有一个电脑类(Computer),电脑除了有基本的开机关机功能外,还有连接任何外接设备的功能,比如能电脑能连接外置键盘(Keyboard),鼠标(Mouse),投影仪(Projecter)等很多外置设备,请用代码来实现该需求;

实现步骤如下:

首先需要创建三个类Keyboard,Mouse,Projecter即键盘、鼠标、投影仪类,并且都有自己的功能

其次需要创建一个Computer类,类里面有开机(openComputer)方法,也有关机(closeComputer)方法,而且还有三个接收外置设备的方法connectKeyboard,connectMouse,connectProjecter,代码如下:

//  键盘类
public class Keyboard {
   public void work(){
    System.out.println("外置键盘可以用来输入数据");
   }
}

 //  鼠标类
public class Mouse{
   public void work(){
    System.out.println("鼠标方便操作人员打开一些程序");
   }
}

  // 投影仪类
public class Projecter{
   public void work(){
    System.out.println("投影仪把屏幕投影到墙上放大");
   }
}

 //  定义笔记本类
 // 功能: 开机,关机,接收外置设备 键盘 鼠标 投影仪 并让其工作

public class Computer {
   //开机
   public void openComputer(){
    System.out.println("笔记本开机");
   }
   //关机
   public void closeComputer(){
    System.out.println("笔记本关机");
   }
   //连接外置键盘 并让其输入
   public void connectKeyboard(Keyboard k){
    k.work();
   }
   //连接鼠标 并让其点击
   public void connectMouse(Mouse m){
    m.work();
   }
   //连接投影仪 并让其投影
   public void connectProjecter(Projecter p){
    p.work();
   }
}

现在这个需求我们就已经做完了。但是假如此时一些电脑配件的生产商又生产出了一种新设备“U盘”用来做外置存储的,那么这时候我们除了需要再写一个U盘类之外,还需要在Computer类中加一个连接U盘的方法(这体现在现实生活中就是把原来已经制作好的电脑解体重新改装出一个用来连接U盘的口子),增加的代码如下:

//  U盘类
public class UDisk{
   public void work(){
     System.out.println("U盘可以用来存储数据");
   }
}

 // 定义笔记本类
 //  功能: 开机,关机,接收外置设备 键盘 鼠标 投影仪 并让其工作
public class Computer {
   //开机
   public void openComputer(){
     System.out.println("笔记本开机");
   }
   //关机
   public void closeComputer(){
     System.out.println("笔记本关机");
   }

   //连接外置键盘 并让其输入
   public void connectKeyboard(Keyboard k){
     k.work();
   }

   //连接鼠标 并让其点击
   public void connectMouse(Mouse m){
     m.work();
   }

   //连接投影仪 并让其投影
   public void connectProjecter(Projecter p){
     p.work();
   }

   //连接U盘 并让其存储
   public void connectUDisk(UDisk u){
     u.work();
   }
}

对于U盘新设备,我们经过改装电脑,可以让电脑连接使用了。但是可恨的是 就在此时,电脑配件的生产商又生产出了外置音响,我们快要疯了,因为我们不得不又要把电脑拆了,重新改装出一个连接外置音响的口子。这时候我们并没有着急去改装自己的电脑,因为万一自己改装完了之后 电脑配件生产商又生产出了其他的外置设备呢?难道我们就一直改装下去吗?那究竟有没有一种解决办法呢??

答案是肯定的,接口的出现很好的解决了这一问题,我们向电脑配件生产商提供了一套规范 名叫USB,告诉他们以后再生产任何的设备都要留出USB形状的对接口,那么我们的电脑只需要留出一个USB形状的对接口,用来连接任何具有该形状对接口的设备即可,改进代码如下:

//  定义笔记本类
//  功能: 开机,关机,接收任何USB设备
public class Computer {
   //开机
   public void openComputer(){
     System.out.println("笔记本开机");
   }
   //关机
   public void closeComputer(){
     System.out.println("笔记本关机");
   }
   //连接USB设备 并让其进行相应的工作
   public void connectUSB(USB device){   //父接口的引用可以接收任何的子类对象,多态!
     device.work();     //此处运行的是子类的重写后的work方法
   }
}

 //  自定义的USB接口
 //  规范  USB设备能运行并完成相应的功能
public interface USB {
   public abstract void work();
}

 // 键盘类

public class Keyboard implements USB{
   public void work(){
     System.out.println("外置键盘可以用来输入数据");
   }
}

 //  鼠标类

public class Mouse implements USB{
   public void work(){
     System.out.println("鼠标方便操作人员打开一些程序");
   }
}

经过这样的设计,我们的电脑只要留出用来连接USB设备的对接口就可以了,不管生产商们生产任何的外接设备,只要他们按照USB接口规范来,他们都能够接入到电脑上去,这样就极大的增强了电脑的拓展性,以及设备的可维护性。

​ 经过这个案例,大家应该明白面向接口编程给我们带来的便利了吧。面向接口编程就是增强了代码的拓展性,而接口就是体现的一种规范,也是提现的一种拓展思想。



Tags:面向接口编程   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
先用一个案例来给大家说明一下面向接口编程。案例:有一个电脑类(Computer),电脑除了有基本的开机关机功能外,还有连接任何外接设备的功能,比如能电脑能连接外置键盘(Keyboard),鼠标...【详细内容】
2020-07-23  Tags: 面向接口编程  点击:(43)  评论:(0)  加入收藏
▌简易百科推荐
1. 前言了解响应式编程,首先我们需要了解函数式操作和Stream的操作,下面我们简单的复习一下喽。1.1 常用函数式编程函数式接口中我们先来回顾一下Java中的函数式接口。常见的...【详细内容】
2022-07-15  二哥学Java    Tags:编程   点击:(1)  评论:(0)  加入收藏
在本文中,我们将学习如何使用 Next.js、 Prisma、 Postgres 和 Fastify 构建一个 Full-stack 应用程序。在本文中,我们将学习如何使用 Next.js、 Prisma、 Postgres 和 Fastif...【详细内容】
2022-07-12  qaseven    Tags:全栈   点击:(9)  评论:(0)  加入收藏
好的软件开发网站有哪些?做软件开发哪些网站能提供帮助呢?这些很多做软件开发的小伙伴都会问到的问题。007出海全球社交流量导航网站,整合了多方出海跨境网站资源,为你介绍出海...【详细内容】
2022-07-08  Chuhai007    Tags:软件开发   点击:(10)  评论:(0)  加入收藏
我们用monkey做压力测试后,会保存一个monkey日志,那如果想快速的分析日志中有哪些异常,我们可以用批处理工具进行快速的筛查,我们一起来看看吧。先编写个小脚本,然后修改为bat后...【详细内容】
2022-07-08  溪流涌动    Tags:monkey   点击:(13)  评论:(0)  加入收藏
白盒测试落地实践分为两个大方向,一个是静态分析,一个是动态分析,当然啦,也可以叫做静态测试和动态测试。那我们如何高质量保效率的做好白盒测试呢?Parasoft已经为您准备好了成熟...【详细内容】
2022-07-08  Parasoft中国    Tags:白盒测试   点击:(11)  评论:(0)  加入收藏
Altium Designer 自带脚本功能的开发项目,可以调用官方AD API接口对原理图或者PCB进行自动操作,本文主要分享开发的流程,和一些基本的概念信息,本文介绍的脚本工具例子可以用在P...【详细内容】
2022-07-07  电子工程师伟哥    Tags:Altium Designer   点击:(21)  评论:(0)  加入收藏
一、目录介绍 前置知识点 NIO Netty 的核心组件 Channel Callback Future 和 Promise 事件和 ChannelHandler Hello World二、前置知识点1、NIO首先我们需要回顾一...【详细内容】
2022-07-06  架构师jickly    Tags:聊天系统   点击:(16)  评论:(0)  加入收藏
1.事件流事件流是对事件执行过程的描述,了解事件的执行过程有助于加深对事件的理解,提升开发实践中对事件运用的灵活度。2.捕获和冒泡捕获阶段是【从父到子】的传导过程,冒泡阶...【详细内容】
2022-07-06  金乾坤    Tags:API   点击:(13)  评论:(0)  加入收藏
刷盘策略CommitLog的asyncPutMessage方法中可以看到在写入消息之后,调用了submitFlushRequest方法执行刷盘策略:public class CommitLog { public CompletableFuture<PutMe...【详细内容】
2022-07-06  Java码农之路    Tags:RocketMQ   点击:(16)  评论:(0)  加入收藏
最近读了本好书-《深度学习推荐系统》,读完不觉全身通畅,于是就有了写这篇文章的想法,把自己的理解和总结分享给大家。 本文将按照从算法到工程的顺序,先介绍一下推荐系统整体...【详细内容】
2022-07-05  InfoQ    Tags:推荐系统   点击:(22)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条