這個好處多多啊, 所謂的接口就是只給出了函數聲明,但是沒有函數體的類嘛 ,函數體在實現類中給出.
假設你有一個數據庫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接口就像一個標準一樣,被社會大眾所接收了