java 接口编程_JAVA面向接口编程

一、什么是面向接口编程

要正确地使用Java语言进行面向对象的编程,从而提高程序的复用性,增加程序的可维护性、可扩展性,就必须是面向接口的编程。面向接口的编程就意味着:开发系统时,主体构架使用接口,接口构成系统的骨架。这样就可以通过更换实现接口的类来更换系统的实现。

例如:在上节示例中,Java接口Introduceable就是系统骨架的一个重要组成部分,这个Java接口定义了一个方法:detailo中心类和教员类分别实现了Java接口Introduceable,因此具有了不同的detail方法实现。在School2类中,print方法接收的参数类型是Introduceable,这样,就可以向print方法传递任意一个Introduceable接口的实现类,在运行时,Java虚拟机会根据实际创建的对象类型调用不同的方法实现。这就意味着:可以通过更换实现接口的类来更换系统的实现。

二、面向接口编程的示例

接下来通过一个示例详细讲解面向接口编程的实现过程。

案例需求的效果图如图1所示。

升级系统,要求如下:

★ 打印机有多种类型,比如:黑白打印机、彩色打印机等。

★ 中心可能配备其中任意一款打印机,负责打印教员或者中心的详细信息。

★ 系统要具备良好的可扩展性与可维护性。

1_110615195245_1.jpg

图1 使用不同类型的打印机进行打印

采用面向接口编程的方式实现可以分为3个步骤。

1.抽象出Java接口

分析:由于黑白、彩色打印机都存在一个共同的方法特征:print,而且黑白、彩色打印机对print方法有各自不同的实现,因此可以抽象出一个Java接口PrinterFace(代表打印机),在其中定义print方法。

具体实现代码如下:

折叠

Java 代码

package Java.sg.ch03;

publicinterfacePrinterFace {

//定义打印方法

publicvoicl print (String content);

}

2.实现Java接口

分析:在第一步中已经抽象出Java接口PrinterFace,并在其中定义了print方法。由于黑白、彩色打印机对print方法有各自不同的实现,因此在第2步中,要让黑白、彩色打印机实现PrinterFace接口,各自实现print方法。

彩色打印机代码实现如下:

折叠

Java 代码

package Java.sg.ch03;

publicclassColorPrinterimplements

PrinterFace {

/**

* 打印方法

*/

publicvoidprint(String content) {

System.out.println("彩色打印 :");

System.out.println(content);

}

}

黑白打印机代码实现如下:

折叠

Java 代码

package Java.sg.ch03;

publicclassBlackPrinterimplements

PrinterFace {

/**

* 打印方法

*/

publicvoidprint(String content) {

System.out.println("黑白打印 :");

System.out.println(content);

}

}

3.使用Java接口

经验:现在,Java接口及其实现类都已经创建完毕,接着,我们就要使用面向接口编程的原则,让接口构成系统的骨架,以便达到更换实现接口的类就可以更换系统的实现的目的。

中心类负责对外提供打印功能,要求可以随时更换打印机类型。代码实现如下:

折叠

Java 代码

package Java.sg.ch03;

publicclassSchool3implementsIntroduceable{

privatePrinterFace printer;//打印机

//  输出中心的详细信息

publicString detail() {

return"这里是中心";

}

//  使用中心打印机打印信息

publicvoidprint(Introduceable intro){

printer.print(intro.detail());

}

//设置打印机

publicvoidsetPrinter(PrinterFace p) {

this.printer = p;

}

}

测试类提供main方法进行单元测试。代码实现如下:

折叠

Java 代码

/*

* jsp.sg.ch04.Test.java

* 2011-5-29

* 4u^j2JavaJavaL

*/

packageJava.sg.ch03;

publicclassTest {

publicstaticvoidmain(String[] args) {

//创建中心实例

School3 school =newSchool3();

//为该中心配备黑白打印机

school.setPrinter(newBlackPrinter());

school.print(school);

//为该中心配备彩色打印机

school.setPrinter(newColorPrinter());

school.print(school);

}

}

经验:面向接口编程可以实现接口和实现的分离,这样做的最大好处就是能够在客户端未知的情况下修改实现代码。那么什么时候应该抽象出Java接口呢?一种是用在层和层之问的调用。层和层之间是最忌讳耦合度过高或是改变过于频繁。设计优秀的接口能够解决这个问题。另一种是用在那些不稳定的部分上。如果某些需求的变化性很大,那么定义接口也是一种解决之道。设计良好的接口就像是我们日常使用的万用插座一样,不论插头如何变化,都可以使用。

最后强调一点,良好的接口定义一定是来自于需求的,它绝对不是程序员绞尽脑汁想出来的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序 显示细线_精心设计:高密度显示器上的细线

小程序 显示细线Despite the many benefits of Retina displays, there is one clear drawback that must be considered when designing for high-density screens:尽管Retina显示器具有许多优点,但在设计高密度屏幕时仍必须考虑一个明显的缺点: 必须避…

React 入门手册

大家好,我是若川。推荐这篇可收藏的React入门手册。也推荐之前一篇类似的文章《如何使用 React 和 React Hooks 创建一个天气应用》。点击下方卡片关注我、加个星标React 是目前为止最受欢迎的 JavaScript 框架之一,而且我相信它也是目前最好用的开发工具…

根号 巴比伦_建立巴比伦卫生设计系统

根号 巴比伦重点 (Top highlight)In this post I’ll explain the first phase of creating our Babylon DNA, the design system for Babylon Health, and how we moved the Babylon design team from Sketch to Figma.在这篇文章中,我将解释创建巴比伦DNA的第一阶…

《Migrating to Cloud-Native Application Architectures》学习笔记之Chapter 2. Changes Needed

2019独角兽企业重金招聘Python工程师标准>>> Cultural Change 文化变革 A great deal of the changes necessary for enterprise IT shops to adopt cloud-native architectures will not be technical at all. They will be cultural and organizational changes t…

前端,你要知道的SEO知识

大家好,我是若川。三天假期总是那么短暂,明天就要上班了。今天推荐一篇相对简单的文章。点击下方卡片关注我、加个星标之前有同学在前端技术分享时提到了SEO,另一同学问我SEO是什么,我当时非常诧异,作为前端应该对SEO很…

高安全性同态加密算法_坏的同态性教程

高安全性同态加密算法I was going to write at length about the issues I see in neumorphism and why this trend should be avoided. I know any attempt to guide my most impressionable colleagues away from it, will end up being failing because this fad is going t…

前端容易忽略的 debugger 调试技巧

大家好,我是若川。我们日常开发碰到的很多问题,通过 debugger 都能快速定位问题,所以推荐这篇大家容易忽略的调试技巧。会定位问题,可以节省很多时间。也就是我经常说的工欲善其事,必先利其器。也是为什么我经常强调调…

Spring高级程序设计这本书怎么样

关于Spring高级程序设计 评论读后感:这本书需要有一定的spring基础的人看读后感:对于了解Spring 很有用,并且是一本不错的参考书读后感:这本书早就想买了,就是太贵了~~~ 啦啦啦&…

玉伯:开源有带给我什么

在2021年527蚂蚁技术日上,蚂蚁内源社区举办了内源专场,在专场上玉伯给大家分享了《开源有带给我什么》,以下为演讲的图文整理。我的开源之路我从2009年到2018年,接近十年时间,一直在做开源的一些事情,在这个…

python并行运算库_最佳并行绘图Python库简介:“ HiPlot”

python并行运算库HiPlot is Facebook’s Python library to support visualization of high-dimensional data table, released this January. It is particularly well known for its sophisticated interactive parallel plot.HiPlot是Facebook的Python库,用于支持…

Asp.net 文件上传的 FileUpload FileName 和 FileUpload PostedFile.FileName的细节问题

Asp.net 文件上传的 FileUpload FileName 和 FileUpload PostedFile.FileName的细节问题 ASP.NET 文件上传估计大家都用得很熟悉,常用控件 FileUpload 。 主要步骤: 1.判断是否合法 2.获得文件的路径 (包括目录的完整路径,同时可能…

【赠书福利】不扶好眼镜,请别打开这本挑战JS语言特性的书

文末赠福利大家好,我是若川。为感谢大家一直以来的支持和肯定,文末抽《JavaScript悟道》3本包邮送和若干红包,详细规则请看文末哦。"人们不停地给老化的语言“整容”,拼命地往其中注入各种新的特性来稳住其流行地位&#xff…

我在工作中是如何使用Git的

大家好,我是若川。今天分享一篇关于git的好文章。我自己经常用命令行终端和git缩写。具体可以看我以往的文章。使用 ohmyzsh 打造 windows、ubuntu、mac 系统高效终端命令行工具,用过都说好。点击下方卡片关注我、加个星标学习源码整体架构系列、年度总结…

克服浮躁_设计思维:您克服并赢得低迷的最终工具。

克服浮躁设计思维101 (Design thinking 101) Let’s begin by getting ourselves clear on the question: What is design thinking?让我们首先弄清楚问题:设计思想是什么? Many people have an impression that design thinking has something to do …

java参数化查询_小博老师解析Java核心技术 ——JDBC参数化查询(二)

[步骤阅读四]SQL注入按照以上方式开发,确实已经完成了基本的用户登录业务需求,但是这么做的话可以会出现一个比较严重的问题,那就是容易被SQL注入。所谓SQL注入,就是在需要用户填写信息,并且这些信息会生成数据库查询字…

前端抢饭碗系列之Vue项目如何做单元测试

大家好,我是若川。今天分享一篇vue项目如何做单元测试的好文,文章比较长,建议先收藏,需要时用电脑看。点击下方卡片关注我、加个星标学习源码系列、年度总结、JS基础系列关于单元测试,最常见的问题应该就是“前端单元测…

java activiti jbpm_activiti和jbpm工作流引擎哪个比较好?

原标题:activiti和jbpm工作流引擎哪个比较好?在常用的ERP系统、OA系统的开发中,工作流引擎是一个必不可少的工具。之前在选择工作流引擎时曾经在activiti和jbpm之间有过比较,当时做出的决定是使用jbpm,但实际开发过程中…

识别人声_演唱人声的5个技巧

识别人声什么是声乐伴奏? (What is Vocal Comping?) Vocal comping describes the process of combining multiple vocal takes into one “supertake” that has the best parts of each. This is called a “composite track,” or comp for short. Many instrum…

你知道source map如何帮你定位源码么?

大家好,我是若川。今天分享一篇我们经常会忽略的定位原始代码位置原理的文章。文章不长,例子不错,可以先收藏,有空时动手试试。学习源码系列、年度总结、JS基础系列前言我们知道,代码上线前要经过压缩,美化…

OOP 中的 方法调用、接口、鸭式辩型、访问者模式

2019独角兽企业重金招聘Python工程师标准>>> 方法调用的四种方式 直接调用:通过类或者实例直接调用其方法。接口调用或者转型调用:通过将实例回调给一个接口对象,或者转型为一个父类的实例,来调用间接调用:…