面向接口的編程正是java的優(yōu)點,首先 用起來方便,結(jié)構清晰
在j2ee中的接口也就是類,類與類之間的通信因為接口而變的簡單易懂
呵呵,像J2EE中的API規(guī)范基本上都是接口,由各應用服務器來實現(xiàn),比如:WebSphere按照這個接口實現(xiàn)自己的,WebLogic也按照這個接 口實現(xiàn)自己的,作為開發(fā)者來說我們根本就不用去管誰是怎樣實現(xiàn)的,只要按照J2EE的API
來寫就可以了,根本用不著導入它們的實現(xiàn)包,實際上具 體的是由它們自身完成了。
接口說白了,也就是定死了一個框,具體的是糊紅紙還是糊黑紙我們都用不著去管的,我們只要知道它是個框,提供
了 哪些方法就夠了。
舉個簡單的JDBC的例子吧,比如有個BaseDao接口,現(xiàn)在有MySQLDao實現(xiàn)了一個(我們可以把具體的實現(xiàn)類 配在配置
文件中,再通過反射進行實例化),也就類似這樣的:
BaseDao dao = (BaseDao)(Class.forName(Config.getDaoName()).newInstance());
其中 Config.getDaoName()可以獲得配置文件中的配置,比如是:com.bao.dao.impl.MySQLDao。
之 后,那些人開始要燒錢了,要改用Oracle了,這樣我們只要按BaseDao的定義,再實現(xiàn)一個OracleDao就可以了,
再將配置文件中的 配置改為:com.bao.dao.impl.OralceDao就可以了,而在已經(jīng)寫好的代碼中,我們可以一行不
改的進行了數(shù)據(jù)庫移植,這個就 是面向?qū)ο笤O計原則中的“開-閉原則”(對增加是開放的,對修改是封閉的)。但
這只是理論上的,現(xiàn)實中很難做到的。
接口 = 電腦的USB插口!
因為接口訂好了,所以那面到底插的是什么就不重要了!
我們用戶只需要
1 插上去
2 停用移動設備
3 拔下來
這三個就好似USB的接口功能。他隱藏了實際功能,但提供給用戶統(tǒng)一的操作界面和使用方式
寫小的應用程序看不到接口的優(yōu)勢,寫大點的程序馬上就顯示出接口的優(yōu)勢,越大越明顯.所以還是從現(xiàn)在開始養(yǎng)成面向接口編程的習慣.寫多了程序就會覺得優(yōu)勢 顯而易見.
鏈條組裝起來了,然后向上面掛東西.....掛的東西可以隨時拿下來,可以隨時替換掉,可以隨時安上去.......
子類只能繼承一個父類
卻可以繼承多個接口..功能區(qū)分清晰,改起來方便
夠了吧
多給點
優(yōu)點:
接口和實現(xiàn)分離了,適于團隊的協(xié)作開發(fā)。
更具體的優(yōu)點:可以參看IDP原則。
缺點:
設計難了,在你沒有寫實現(xiàn)的時候,就得想好接口,接口一變,全部亂套,這就是 所謂的設計比實現(xiàn)難。
主要為了實現(xiàn)松散耦合的系統(tǒng),便于以后升級,擴展.你去研究一下spring吧,那東東會讓你真正體會到interface的優(yōu)點.
接口,主要是為了 彌補 JAVA 丟失的 多繼承性 的特點吧 。。。
封裝好,好使用
易擴展
容易讓人把編寫程序和現(xiàn)實聯(lián)系起來。呵呵
接口在項目中用的比較多的原因是,當你調(diào)用別人的接口時可以不用部署,直接引用就行了。
我記得我曾經(jīng)在一篇帖子中提到過,一個接口可以從三方面去考察:
制 定者(或者叫協(xié)調(diào)者),
實現(xiàn)者(或者叫生產(chǎn)者),
調(diào)用者(或者叫消費者)。
接口本質(zhì)上就是
由制定者來協(xié)調(diào)實現(xiàn)者和調(diào)用者之間的關系。
所以通常說的 “面向接口編程”可以理解為:
只有實現(xiàn)者和調(diào)用者都遵循“面向接口 編程”這個準則,制定者的協(xié)調(diào)目的才能達到。
一個老生常談的例子就是JDBC。
很多人費解:既然我每連接 一種數(shù)據(jù)庫(如mysql)都要事先部署驅(qū)動程序,那我直接訪問驅(qū)動程序不就行了?還要JDBC干嗎?
實際上,JDBC已經(jīng)起了至關重要 的作用了:正因為驅(qū)動程序是按照JDBC所規(guī)定的方法編寫的,你才可以按照JDBC的方式去使用。
換句話說,如果驅(qū)動程序提供者不按照JDBC標 準來編寫,而是按它自己獨創(chuàng)的方式編寫,那么你在使用驅(qū)動程序的時候就要花時間查看驅(qū)動程序的文檔以搞清楚用法。而當你日后決定使用另一種數(shù)據(jù)庫的時候, 這種數(shù)據(jù)庫的驅(qū)動程序也不是按照JDBC編寫的,你又得去搞清楚另一套完全不同的用法,而你的所有代碼都必須做相應的更改。這種代價是不可想象的。
而 現(xiàn)在的情況是,驅(qū)動程序提供者都按照JDBC規(guī)定的方式來編寫,程序員都按照JDBC規(guī)定的方式來使用。程序員不用關心自己正在使用何種數(shù)據(jù)庫,而驅(qū)動程 序編寫者也不用費盡心力去編寫接口文檔來向程序員解釋驅(qū)動程序的用法,大家都向標準看齊就行了。
轉(zhuǎn)載自:
http://www.java123.net/JavaSE/mianxiangjiekoubianchengdehaochuheyoudian_7139.html