今天給大家介紹的是面向接口編程:
首先需要知道為什么要面向接口編程,會給我們帶來什么好處,在寫這篇文章之前,我也看過很多博客跟帖子上的介紹,不過說句實話講解的很一般,其實面向接口編程的最主要兩個字在接口上,接口帶來的好處就是降低耦合性(解耦);可能一些人不太了解這個詞,我來用一個實例做介紹:
現在我有兩個類代碼如下
public class Dao{
public User findByName(String username){
//這個方法實現的是去excel中查找username這個用戶
}
public void addUser(User form){//這是一個向excel寫入的數據(當然你要熟悉poi技術,如果是xml就需要熟悉dom4技術),添加用戶的方法實現}
}
public class Service{
Dao dao = new Dao();
public void login(User form){//這是一個模擬的登錄方法依賴的是Dao類中的兩個方法}
}
如果現在我們公司決定不在使用excel作為數據存儲設備,而是換成效率更高的數據庫;
其實問題大家都知道了,如果要修改代碼,我們就需要重新做測試,這會消耗很大的成本,那么我們就需要在不修改代碼的基礎上完成需求;
從而引出了Spring之父的理念面向接口編程,即InterfaceDao dao = new Dao();即使這樣大家還是發現代碼還是死的,還需要去new對象,雖然這個接口InterfaceDao{
findByName(String username);
addUser(User form);
}有了,但是仍然沒有滿足我們的需要;
這里給大家介紹一種設計模式,————工廠設計模式:
我們不需要通過new來獲取對象,而是通過工廠幫我們生產一個對象,其底層依賴的反射原理,代碼如下
配置文件一定要放在類路徑下,如果是eclipse就是src下面,否則加載不到,user.properties為配置文件名,內容是鍵值對,(我的習慣鍵用)接口名=(包名別丟)實現類名;
由此,我們Service類中的代碼變成了——InterfaceDao dao = UserDaoFactory.getUserDao();
到此我們無論我們怎么修改Dao類中的代碼,都不用修改Service中代碼;只需要修改user.proerpties配置文件;
下面我們實現一個Dao類用mysql數據庫代碼如下:
addUser(User form)方法就自己實現吧,如果有問題可以關注博客,這個類就完成了,只要修改掉user.properties中的配置類,就可以實現數據庫與excel之間的切換,達到解耦的目的;歡迎隨時提問,下一期會分享MVC設計模式不要錯過,最近一直在學習人工智能,有學友歡迎一起探討。