個人理解:定義接口變量為接收類型屬於面向接口的編程,通過接口的抽象能減少類之間的耦合,增加可復用性。
面向接口編程:
一種規范約束
- 制定者(或者叫協調者),實現者(或者叫生產者),調用者(或者叫消費者)。
- 接口本質上就是由制定者來協調實現者和調用者之間的關系。
- 只有實現者和調用者都遵循“面向接口編程”這個准則,制定者的協調目的才能達到。
- 接口的語義是can-do語義,表約束(Constraint)。
- 像JDBC的規范API,不管你使用哪一套實現,我們使用的時候都是使用相同的API.
分離設計與實現
- 使得系統可以支持開閉原則和依賴倒轉原則。設計師可以設計出接口,而程序員可以依照接口去寫實現。
解耦合
- 在一定程度上解耦合,依賴接口還不依賴具體實現,在替換實現類的時候,可以將影響減到最小。
方便做單元測試
- 在依賴接口的情況下,單元測試更容易,使用mock也更容易,在TDD中,測試驅動就是要讓程序易於測試。
與設計有關
- 在一個面向對象的系統中,系統的各種功能是由許許多多的不同對象協作完成的。
- 在這種情況下,各個對象內部是如何實現自己的對系統設計人員來講就不那么重要了;
- 而各個對象之間的協作關系則成為系統設計的關鍵。
- 在OSGI規范中,接口與實現的分離是用得最淋漓盡致的。
Spring的IoC
- Spring將類的創建過程隱藏起來,實際上就是一個大的工廠,使得我們的代碼更簡潔,更易於管理和測試。
參考:
http://ask.csdn.net/questions/217447
http://blog.csdn.net/u010382560/article/details/48051355
http://www.cnblogs.com/chaohi/archive/2008/10/23/2330442.html
http://blog.csdn.net/u013400743/article/details/51252003
http://www.cnblogs.com/xyqCreator/archive/2012/11/06/2756687.html
http://blog.csdn.net/greenlihui/article/details/61916129
https://www.cnblogs.com/feng9exe/p/5588671.html
http://blog.csdn.net/jj_nan/article/details/70161086