`
gemantic
  • 浏览: 337790 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java 中的接口有什么作用?

 
阅读更多
接口是软件工程最重要的概念,在java上要格外感谢Spring的贡献。
这个概念对于新人来讲,是比较难理解的,最重要的原因就是需要有一定的代码量,特别是做过一些项目的重构,维护,变更等事情的时候感触才会更深一些。

1 “接口+实现”最常见的优势就是实现类和接口分离,在更换实现类的时候,不用更换接口功能。

比较常见的例子是发送短信。
一般发送短信的场景包括注册用户,找回密码,重要通知,修改交易密码等。

短信现在的结构是先接上各家短信通道公司,再经由联通移动等发送出去。

一般而言,短信分成两种,一种注册短信,一次只发给用户一条。这种短信到达率比较高,可能会在99%以上,也要看各种短信通道方,更会区分移动和联通。
另外一种是营销短信,这种短信常见于“某公司3周年大庆,1元领取程序员鼓励师”之类的。

这种短信到达率非常低。而且也经常会被封掉。

但是短信又是注册的第一步,用户体验做的再好,手机收不到验证码也没用。
所以觉见的做法是,会备用两个或者是多个短信通道。

刚刚已经讲过了,调用短信接口的地方比较多,可能是用户发起的,也可能是程序检测到某种行为触发的。

也就是说,会有多个地方调用短信接口,那么我们这个时候要解决的问题就是,能否在更换短信通道方的时候,不更改其他模块中被引入的代码?

接口在这个时候就完美的实现了这个功能点。无论是哪个模块,我要发送的内容和预期的结果是一致的,具体是用哪家短信通道的实现类,不重要。

所以通常是一个SMSService做为接口,不同的公司因为有不同的实现方式,所以会有多个实现类,比如说SMSService{CorpA}Impl,SMSService{CorpB}Impl。

这是一个完美的抽象,无论未来有多少种短信公司接入,无论短信公司的营销人员送了多少个香吻给公司的商务总监,程序员总是能够开心的完成功能。

2.这对于做单元测试也非常有帮助。

如果你是一个有了那么点经验的程序员,如果你还没有习惯TDD的开发。可以体验一下这种写法。还是拿短信为例。

先写一个SMSServiceTest。

然后写一个Test方法。

这个时候什么都没有,不用管。先直接这么写。

int code=SMSSevice.sendTextMessage(mobile,content,type);

这个时候IDE会提示你没有这个SMSService,用代码自动生成工具去创建这么一个接口出来。
再根据提示把方法创建出来。

再写 SMSService smsService=new SMSServiceCorpaImpl();

再根据代码把实现类生成了。一般来说IDE会自动留一个空的方法。不用管。

这里只是一个简单的例子,但是你发现,当你用TDD的这种方式去写代码的时候,完全不用关系SMSService是怎么内部实现的。

你只需要继续写你的单元测试代码好了,明确的知道这个SMSService要做的功能是发送短信,需要传递手机号,内容,类型,返回一个状态码。

那么接着说为什么对单元测试很方便?
一般而言会用Spring配置Bean,所以实际上你的单元测试代码也不用有改动,无论是测试哪一个实现类,都只通过更改配置文件就可以完成。

想想,如果没有接口呢?

是不是要对每一个短信通道单独写一个单元测试的方法?

3.对于不需要频繁更变实现类的方法,是不是就可以不用写接口了?

答案是No。整个系统架构的代码可以单纯认为有四部分构成。Model+Interface+Service+Util

Model是纯粹的Pojo,贫血模型,Inteface和Service是接口和实现分开的,Util是全项目通用,或者是跨项目通用的,跟业务逻辑没有任何关系的。

写接口最大的好处就是在你写的Controller代码,或者是Service里的主要业务逻辑代码的时候,屏蔽掉细节。

写一个业务逻辑的时候,比如说修真院的加入班级。
第一步,做校验,用户是否为空,班级是否不存在,是否已经加入了班级等等。
第二步,更新班级和用户的关系表,更新班级总人数,更新职业总人数,更新用户的最新班级ID。
第三步,发送系统通知,告知用户加入班级成功。

如果说不用接口,只用实现类的话,第一种方式就是把所有的代码都写在这个Controller里去,代码会非常非常繁琐,一个函数突破几千行轻轻松松,而且改动起来很麻烦。

第二种方式就是抽象出来函数。这种方式在某种程度上能够解决代码块大的问题,但是你必须要New一个实现类出来,想想在上述逻辑中,需要new几个实现类?

这些实现类就会被New的各处都是,甚至改个名字都很蛋疼。


但是如果你使用接口的话,你会发现,接口是强制于你去将复杂的业务逻辑抽象成具体做的事儿。


比如说,
if(user==null){
// to do something
}

就变成了CheckUser(uid)这么一个接口。实现类也明确了自已要做的事情。

从某种程度上来说,抽象成一个私有方法也能解决这个问题,但是一般都会推荐,如果你发现你写了很多私有方法,要么是他们可以继续演化成一个util,要么是可以成为一个Service。


嗯,说的有点乱。
分享到:
评论

相关推荐

    java中接口的作用

    Java 中接口的作用 Java 中的接口是一种抽象的概念,它定义了一组方法的集合,但不提供实现。接口的主要作用是提供一种规范,以便实现类来实现这些方法。接口的作用主要体现在以下几个方面: 多重继承:Java 中的...

    Java中interface接口的作用

    下面将详细讲解Java接口的作用以及其在实际开发中的应用。 首先,接口作为契约,定义了类必须遵循的公共行为。通过实现一个或多个接口,一个类可以声明它支持哪些操作,而无需关心具体的实现细节。这种解耦使得代码...

    使用java请求json接口数据

    这里我们将深入探讨如何使用Java来获取指定接口的JSON数据,并涉及`HttpServletRquest`类的重要作用。 首先,理解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,...

    JAVA 接口用法 PPT

    Java接口是一种重要的编程概念,它是Java语言中定义多个类共享行为的一种方式。接口与抽象类相似,都用于定义类的公共属性,但是接口更偏向于一种“纯”抽象,它只包含方法签名(方法名、参数列表和返回类型),而不...

    java接口的不同使用

    本文将深入探讨Java接口的使用方法,帮助你理解其核心特性、作用以及如何在实际编程中灵活运用。 1. **接口的定义与特点** - 接口中所有的方法默认都是抽象的(abstract)和公开的(public),不需要声明这两个...

    JAVA中接口的作用1

    总结来说,接口在 Java 中的作用主要包括以下几点: 1. **抽象**:接口定义了一组抽象方法,这些方法代表了一类行为或特性,而具体的实现则由实现接口的类完成。 2. **多态**:通过接口,不同的类可以实现相同的...

    支付宝java确认接口

    在Java中实现支付宝确认接口,主要涉及以下几个步骤: 1. **获取接口文档**:首先,开发者需要从支付宝开放平台获取相应的接口文档,文档中会详细说明接口的URL、请求参数、响应格式等信息。 2. **签名机制**:...

    Java中接口的作用.pdf

    文档“Java中接口的作用.pdf”中提到的接口“DataBase”,表明了如何利用接口来实现数据库连接和关闭操作的统一。在这个接口中,定义了两个抽象方法:`openDB(String url, String user, String password)`和`close()...

    Java 语言程序设计:第5章接口多态.ppt

    接口是 Java 语言中的一种抽象机制,它提供了一种定义类之间的“协议”的方式,允许类之间实现多继承,同时免除 C++ 中的多继承那样的复杂性。同时,接口也可以用来定义常量和抽象方法,提供了一个面向对象的重要...

    Java接口.docx

    Java 接口是一种抽象类型,用于定义一组方法的规范和约束形式,它的主要作用是提高程序的复用性、可维护性和可扩展性。下面我们将详细讨论 Java 接口的定义、实现和使用。 一、定义 Java 接口 定义 Java 接口需要...

    java包与接口实验报告

    #### 二、Java接口的作用及使用 - **接口的作用**:接口是一种抽象类型,它定义了一组方法签名但不提供具体的实现。通过实现接口,类可以声明自己支持某些行为,而具体实现则由实现该接口的类来完成。 - **接口的...

    java 中的接口与继承

    在Java编程语言中,接口(Interface)和继承(Inheritance)是面向对象设计的重要特性,它们为代码提供了灵活性、可扩展性和复用性。本文将深入探讨这两个概念以及它们在实际开发中的应用。 首先,我们来看一下接口...

    java面试纯基础,基础牢固面试稳过

    Java 中的 List、Set 和 Map 有什么区别? ArrayList 和 LinkedList 的性能差异是什么? 并发 什么是线程?如何在 Java 中创建线程? 解释 synchronized 关键字的作用。 JVM 和内存管理 Java 中的垃圾回收机制是怎样...

    Java 接口 内部类

    Java接口和内部类是Java语言中两种重要的抽象机制,它们在软件设计中起着关键作用。接口主要用于定义对象之间的交互规范,而内部类则提供了一种封装和隐藏类的机制,使得类的设计更加灵活。 首先,接口是一个合约,...

    Java中抽象类和接口的区别与作用详解

    ### Java中抽象类和接口的区别与作用详解 #### 一、引言 在Java编程语言中,`abstract class`和`interface`是两种用于定义抽象类的重要机制。这两种机制不仅支持了Java的强大面向对象特性,而且也在实际开发过程中...

    java接口使用实例源码

    总结一下,Java接口在软件设计中起着至关重要的作用,它们定义了行为规范,促进代码的可扩展性和灵活性。通过研究提供的源码实例,开发者能够更好地掌握接口的使用,包括声明、实现、默认方法和静态方法等特性,从而...

    java中的接口概略

    这些接口有什么作用? USB接口 USB-A 1. 鼠标连接,键盘连接,声卡连接,麦克风,摄像头,补光灯,U盘,移动硬盘 2. 规范,都是USB设备 3. 设备本身决定了,要做什么事情。 2. Java中接口使用 格式: interface 接口...

    java面试宝典

    46、java 中实现多态的机制是什么? 12 47、在java 中一个类被声明为final 类型,表示了什么意思? 12 48、下面哪些类可以被继承? 12 49、指出下面程序的运行结果: 【基础】 13 52、关于内部类: 13 53、数据类型...

    java中接口的使用

    ### Java中接口的使用 #### 一、接口的基本概念与定义 在Java中,接口是一种特殊的抽象类,它被用来定义行为的标准或者说是一组规则。接口的声明必须使用`interface`关键字,后面跟着接口的名称。例如: ```java ...

Global site tag (gtag.js) - Google Analytics