面向接口编程,接口是什么,有什么作用?
本文转载至:https://www.cnblogs.com/lovelycode/articles/6887958.html
我从接触java编程开始,书上、网上看到的都是面向接口编程,虽然一脸懵逼,但也没有多想,这个和每个人的学习习惯有关系吧,我一直都是奉行着what how why的学习原则,管他是什么妥妥的就是干(copy),别人这么干我也这么干。公司里最常见的Spring 业务逻辑层应该是这样的:
接口
public interface UserService {User findByUsername(String username); }
实现类
![](/assets/blank.gif)
@Service @Transactional public class UserServiceImpl implements UserService {@Autowiredprivate UserDao dao;@Overridepublic User findByUsername(String username) {return dao.findByUsername(username);} }
![](/assets/blank.gif)
在很长一段时间里不明白为什么要这样做,也没有去深入研究,以至于再后来开发的时候直接去掉了实现类UserServiceImpl变成了这样
![](/assets/blank.gif)
@Service @Transactional public class UserService {@Autowiredprivate UserDao dao;public User findByUsername(String username) {return dao.findByUsername(username);} }
![](/assets/blank.gif)
妥妥的没毛病,程序少了接口,代码都可以少敲点(幸福来的好突然)。在很长一段时间里整个公司都是这么干的,直到遇到了大一点项目(分布式部署,系统之间产生了交互),然后对接口有了新的认识,以下是自己对接口的一些理解。
很多其他行业在计算机面世之前就已经发展很久了,所以接口并不是计算机程序特有的,可以说接口无处不在。生活中很熟悉的插座
卖插座的厂商不一定会生产插头,但是普通家电的三线插头都是按照这样的规范设计的,为了保证可以完美插入像这样
当然香港买的肾7什么的,他的充电器插头就不好插了,好尴尬WTF
像这样的插头就需要转接头了(设计模式中的适配器模式),厂商是按照不一样的标准生成的,大陆有大陆的标准,香港有香港的标准。
接口是规范
插座是为了规范插头生产厂商,USB接口是为了规范USB生产厂商,程序的接口是为了规范什么呢?为了规范广大不同经验不用阅历的程序猿,为了实现类与类之间的松耦合。调用者只要按照接口规范传入入参接口就会返回期望的出参(结果),具体是怎么实现的(内部结构,业务逻辑)调用者无需关心(像不像领导,只要结果不要过程,领导规定并调用接口,我们去实现)。
public interface SortService<T extends Comparable> {void sort(T[] array); }
SortService的sort方法是给数组正序排序,在数组长度小的时候可能用简单排序,冒泡排序就行了,大一点用归并排序,在大一点用快速排序。对于调用者来说只关注排序的结果,不关注过程。
面向接口编程在协同开发的时候也是非常有作用的,假设两个开发人员A和B一起开发一个商品购买的功能,商品购买的流程假设分为:库存查询和付款,
A负责开发查询库存,B负责开发付款;
A在查询库存返回还有库存后需要调用付款流程;
B提供付款接口给A,A调用接口获得付款结果;
B是怎么实现付款的,A不需要知道,哪天现有的付款逻辑不合适了,B重新开发了,也不会影响整个流程。
付款接口就是规范了B必须要按照接口的方法名,方法入参和出参类型来写实现类。
接口是协议
http协议大家应该很熟悉(客户端请求指定的地址可以当做是服务端提供的一个接口),请求报文格式如下:
服务器按照http约定的报文格式解析报文,客户端按照http约定的报文格式提交报文获得响应数据,至于服务器是怎么产生这些数据的客户端不需要知道,客户端只需请求服务器提供的链接地址就能获取想要的数据,服务器和客户端之间就实现了请求-响应的通信。
最近开发的一个项目由多个子项目构成,项目与项目之间要相互调用对方的接口,项目里使用Hessian框架实现远程接口调用,项目只需将接口和Dto打成jar包给客户端,客户端就能像使用本地的Bean一样,实现调用了(Hessian真是简单粗暴)。将接口暴露给客户端,实现隐藏起来。
客户端和服务端按照约定的协议进行数据交互,服务端按照约定的协议提供接口。
接口是标识
标识实现类可以做什么,不可以做什么,例如:java.io.Serializable接口,此接口没有任何方法和字段,只是标识实现类是否可以序列化和反序列化。像这样的空接口在实际开发中还有很多其他作用,比如标识实现类是否需要统计调用方法的执行时间(druid中的统计)、标识实现类是否需要记录调用日志等等。
当然简单的项目还是可以省去接口的,没有必要搞的太复杂,少敲代码可以实现相同的功能对于程序员来说就是幸福。但这种幸福往往是短暂的(重构和拓展就是噩梦)。
面向接口编程,接口是什么,有什么作用?相关推荐
- 【转】工厂模式面向接口编程
为了实现更好的灵活性 应改面向接口编程.因此,应该面向接口提供工场. 比如,Cat, Dog, Mouse,都是4条腿会跑的动物. 因此,我们建立一个接口叫做F ...
- 黑马java教程是什么_Java教程:揭秘什么是面向接口编程
先用一个案例来给大家说明一下面向接口编程. 案例:有一个电脑类(Computer),电脑除了有基本的开机关机功能外,还有连接任何外接设备的功能,比如能电脑能连接外置键盘(Keyboard),鼠标(Mo ...
- Java面向接口编程,低耦合高内聚的设计哲学
接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极大的降低程序中各个模块之间的耦合,提高系统的可维护性以及可扩展性. 因此,很多的软件架构设计理念都倡导"面向接口编程"而 ...
- java的知识点13——多态、对象的转型(casting)、final关键字、抽象方法和抽象类、接口的作用、如何定义和使用接口?、接口的多继承、面向接口编程
多态 多态指的是同一个方法调用,由于对象不同可能会有不同的行为.现实生活中,同一个方法,具体实现会完全不同. 多态的要点: 1. 多态是方法的多态,不是属性的多态(多态与属性无关). 2. 多态的存在 ...
- Java 面向抽象编程和面向接口编程
以下内容来自<Java 2实用教程>,主编:耿祥义.张跃平 鉴于面向抽象编程和面向接口编程思维培养的重要性,写此博客巩固. 面向抽象编程: 在设计程序时,经常会使用到abstract类,其 ...
- 为什么有人说面向对象编程就是面向接口编程?
"面向对象编程就是面向接口编程" 这句话相信, 很多人都在网上见过, 装b利器. 我一开始也是这么想的, 那些装b者丢下这一句, 就没下文了. 首先, 我认为这句话是1个假命题. ...
- python面向接口编程_Python 中的面向接口编程
前言 "面向接口编程"写 Java 的朋友耳朵已经可以听出干茧了吧,当然这个思想在 Java 中非常重要,甚至几乎所有的编程语言都需要,毕竟程序具有良好的扩展性.维护性谁都不能拒绝 ...
- C语言面向对象编程(四):面向接口编程
Java 中有 interface 关键字,C++ 中有抽象类或纯虚类可以与 interface 比拟,C 语言中也可以实现类似的特性. 在面试 Java 程序员时我经常问的一个问题是:接口和抽象类有 ...
- python 接口编程_Python 中的面向接口编程
前言 "面向接口编程"写 Java 的朋友耳朵已经可以听出干茧了吧,当然这个思想在 Java 中非常重要,甚至几乎所有的编程语言都需要,毕竟程序具有良好的扩展性.维护性谁都不能拒绝 ...
- 软件设计模式—面向接口编程
原文作者:laoer2009 原文地址:设计模式之面向接口编程 01第一次需求 玩家有很多属性,例如:身高,性别 blalalala ,玩家可以攻击其他玩家.产品狗YY妹子写程序也是很利索,一天就把程 ...
最新文章
- 专用计算机教室设备,计算机教室专用规章制度
- c++ 13.二维数组
- MySQL 高级 - 存储过程 - 概述
- mysql数据库基本操作总结与归纳
- python实现api接口的脚本_Zabbix批量添加主机,Python调用api接口方式【脚本定制】...
- win7查看电脑ip地址的方法
- python工作环境创建_VirtualEnv 和Pip 构建Python的虚拟工作环境
- nsdictionary获取值_获得nsdictionary值
- 用Python网络爬虫来抓取网易云音乐歌词
- aria2最新tracker服务器,【无灯+Hiboy】padavan下自动更新aria2的BT tracker 服务器列表...
- 简易数字电路交通灯设计
- 文件服务器实现网络打印,图文详解 服务器共享打印设置
- runtime error python 3.5_Python 3.5 RuntimeError: can't start new thread
- 在服务器上下载安装anaconda
- 安装office时总得到“安装程序包的语言不受系统支持”的提示解决方法
- 计算机快捷键ctrl记忆,PS篇:有效记忆快捷键
- 计算机课英语谐音,各科老师“谐音梗”大集合,英语课现“脏话”,数学化身段子手...
- postgrepsql 安装失败
- YBT 6 数学基础
- FME的ESRI Geodatabase (MDB)格式介绍(一)