面向接口編程在Java web 三層架構的應用與使用工廠模式解決問題
爲什麼要面向接口編程:
在應用中,我們一般都是面向接口編程的,這樣有利於系統的擴展與移植。就像Java Web中的三層架構:展現層、業務邏輯層、數據持久層一樣,上層都是調用下層的接口。因爲一旦下層實現改變:比如持久層從數據庫操作更換爲文件操作,上層因爲調用下層的接口而不用更改任何代碼,利於系統擴展與移植。
面向接口編程的思路要點:
舉一個例子,現在要添加一個用戶,數據持久層接口如下所示:
而其兩個實現分別如下:
一、數據庫實現代碼:
二、文件實現類代碼如下:
這樣業務邏輯層代碼如下所示:
面向接口編程的問題:
這樣如果要使得用戶保存從數據庫更換爲文件,就要修改構造方法中的userInfoDao = new UserInfoDao4SQL();這一行代碼,這樣就有不符合修改擴展的原則,因爲一旦要更改實現,就要更改代碼。
面向接口編程問題的解決思路:
具體的做法是將要更改的代碼提取到配置文件裏,就如同數據庫的配置文件,這樣就可以直接修改配置文件,而不用修改代碼了。這裏我們介紹一種方法,叫做工廠模式方法,代碼如下:
配置文件InterfaceFactory.xml代碼如下:
類InterfaceFactory採用dom4j來解析xml文件,然後在getBean()方法中使用反射機制Class.getName()來生成要採用的接口實現類。並且將實現類放在Map中,這樣以後要用到就直接從map中取,提高了效率。配置文件採用了數據庫實現,如果要採用文件實現則將配置文件轉換爲:
這樣業務邏輯層的代碼修改爲如下,這樣以後就可以不用修改代碼寫該配置文件即可完成: