接口提供了一个公用的方法提供方。 接口是用来规定子类的行为的。
举个例子吧 , 比如有个需求, 需要保存客户信息, 有些客户从网站来, 有些从手机客户端来, 有些从后台管理系统录入, 假设不同来源的客户有不同的处理业务流程, 这个时候我定义接口来提供一个保存客户的方法, 然后不同平台实现我这个保存客户的接口, 以后保存客户的话, 我只用知道这个接口就可以了, 具体调用哪个方法 去实例化具体你需要用的类,这也就是JAVA的多态的体现。 而如果你不用接口的话 , 首先我需要哪个方法 我就去实例化哪个类, 冗余很高, 其次扩展很差。 接口就是一个规范, 其子类都会有他提供的方法。 统一管理。
這個好處多多啊, 所謂的接口就是只給出了函數聲明,但是沒有函數體的類嘛 ,函數體在實現類中給出.
假設你有一個數據庫Dao, 給上一級程序用的: 就是 DatabaseDao dao = new DatabaseDao();這樣子
DatabaseDao{
insert(); 增
delete(); 刪
update(); 改
query() ; 查
}
然後你突然發現你根據需要,程序要鏈接兩個數據庫 一個orcale, 一個 sql server
你就寫了 兩個Dao的實現類orcaleImpl, SQLServerImpl
orcaleImpl implement DatabaseDao(){
insert(); 增orcale
delete(); 刪orcale
update(); 改orcale
query() ; 查orcale
}
SQLServerImpl implement DatabaseDao(){
insert(); 增SQL Server
delete(); 刪SQL Server
update(); 改SQL Server
query() ; 查SQL Server
}
這樣做的好處就將 Dao層和程序上面的其他部分開了, 其他人調用的時候也只是使用DatabaseDao dao = new DatabaseDao(); Dao接口, 具體後面用什麼數據庫 就看具體哪個去實現該接口了.
對應程序的維護有很大幫助, 假設這時候你要添加一個新數據庫 MySQL, 你也就只需創建一個MySQLImpl的類而已, 而其他地方都不用進行修改的.
server跟Dao的原理是一樣一樣的 .
具體分層 頁面 -> controller (調用server接口) -> server(調用Dao接口 ) -> Dao -> database
如果要類比現實中的物體, 就想樓上說的USB接口一個道理, 你永遠不知道USB具體是怎麼回事, 但是你永遠都知道USB接口能被上一級使用,也就是你的手機, 平板,同時使用, 此時USB接口就像一個標準一樣,被社會大眾所接收了
- 等 最代码怎么获取牛币啊?
- 完 谁来告诉我最代码上线的时间,答对者给5牛币,先来先得
- 等 牛友们,大家好,你们做程序员多久了?现在还好吗?
- 完 在微信打开的页面里进行app下载
- 等 最代码2014年欢乐聚声会
- 完 mysql如何查询表数据并且对3个字段降序的SQL?
- 完 最代码牛币机制改革
- 完 成功的在bae上使用了自定义运行环境 jetty+nginx的组合,大家对jetty+nginx优化有哪些心得?
- 完 进来分享一下各位牛牛是如何加入最代码大家庭的?
- 等 为什么java BufferedImage类处理大图直接抛出内存溢出的异常?
- 等 最代码是否开发手机app客户端?
- 完 java程序员学习哪些java的技术?java有哪些框架?都能做哪方面的开发?
- 等 php格式网页文件怎么运行?
- 等 Java volatile值获取的问题
- 等 前端vue,拦截了登录后台后,返回的token,requests拦截token,但是发送请求的时候,就出现跨越异常
- 等 大专本科计算机科班怎么找到Java工作?
- 等 eclipse怎么把三个java swing游戏项目合成一个项目?
- 完 伙伴们,大家都有什么好的解压方式么,分享一下~
- 完 三四线城市,6、7k,运维工作,索然无味,想去辞职上培训,各位牛牛有什么建议嘛
- 等 jsp页面输入中文变成问号
- 等 JPA在线上运行一段时间后报错Caused by: java.lang.IncompatibleClassChangeError: null
- 等 PHP 这个规则用preg_match_all怎么写
- 等 大佬们,有没有知道Alfresco如何配置LDAP登录呢?
- 等 php的install目录是框架带的吗?