五、面向接口編程
在我看來,面向?qū)ο缶幊蹋?font face="Times New Roman" style="line-height: 22px; ">OOP)最有魅力對開發(fā)技術(shù)改進(jìn)最有影響力的就是接口,接口定義一套規(guī)范或標(biāo)準(zhǔn),如何實現(xiàn)取決于他的實現(xiàn)類,這給開發(fā)人員提供了足夠的靈活性,大大增強(qiáng)了系統(tǒng)的可塑性,為開發(fā)人員提供了更加先進(jìn)有效的擴(kuò)展性能。JDBC是接口應(yīng)用最典型的示例之一,Java JDK定義了一組接口,如Connection、Statement、ResultSet等,但并不作出具體的實現(xiàn),事實上,sun公司也沒有能力去實現(xiàn),因為不同的DBMS有不同的數(shù)據(jù)組織格式,如何連接數(shù)據(jù)庫、如何執(zhí)行SQL語句、如何處理返回的結(jié)果集,sun公司無從知曉,所以,通過接口實現(xiàn)數(shù)據(jù)訪問的工作巧妙地轉(zhuǎn)移到了數(shù)據(jù)庫提供商,不得不說這招實在高明。
在我們的系統(tǒng)中,合理利用接口的特征能有效提高系統(tǒng)的擴(kuò)展性和靈活性,尤其Spring的出現(xiàn),通過對IOC的強(qiáng)化,更加突出了接口的作用,學(xué)習(xí)者更容易從代碼級別理解接口的意義。Spring無污染非侵入式的設(shè)計,降低了組件替換和功能擴(kuò)展的成本,為開發(fā)人員打開了程序開發(fā)的另一扇窗。
并不是系統(tǒng)中的所有組件都需要提供接口,定義接口時應(yīng)該先明確功能擴(kuò)展點,對于那些比較固定有一定格式的代碼則無需定義接口,通常情況下,為業(yè)務(wù)類定義一個接口是不錯的選擇,業(yè)務(wù)變更是家常便飯,為業(yè)務(wù)類提供接口有利于我們主動適應(yīng)業(yè)務(wù)的變化。
Eclipse將“重構(gòu)”做得比較強(qiáng)大了,如果你的業(yè)務(wù)類還沒有接口,通過“Refactor->Extract Interface”菜單可以自動為業(yè)務(wù)類生成相應(yīng)的業(yè)務(wù)接口。