介面-DAO模式程式碼閱讀及應用
阿新 • • 發佈:2020-10-25
1.StudenDaoListImpl.java與StudentDaoArrayImpl.java有何不同?
-
StudentDaoListImpl.java使用的是List(列表)介面,StudentDaoArrayImpl.java使用的是陣列介面。
-
二者設定的屬性不同:前者是ArrayList類,後者是陣列;
-
對應的方法內容不同:前者在方法中直接使用引用;後者要建立一個設定陣列長度的方法,並在方法中不斷判斷陣列是否為空。
2.StudentDao.java檔案是幹什麼用的?為什麼裡面什麼實現程式碼都沒有?
作用
定義了學生資料訪問介面,並在裡面定義了三個方法(具體的方法簽名)。
原因
具體的方法在類中實現,其它類通過繼承StudentDao類來完成StudentDao.java檔案中的一種方法的多種方法實現。這樣便可以根據儲存資料方式來定義不同實現。
3.使用搜索引擎搜尋“Java DAO”,選出幾句你能看懂的、對你最有啟發的話。請結合介面知識去理解。
DAO 模式的優勢就在於它實現了兩次隔離。
- 1、隔離了資料訪問程式碼和業務邏輯程式碼。業務邏輯程式碼直接呼叫DAO方法即可,完全感覺不到資料庫表的存在。分工明確,資料訪問層程式碼變化不影響業務邏輯程式碼,這符合單一職能原則,降低了藕合性,提高了可複用性。
DAO把對資料庫的操作(業務邏輯方法)封裝在裡面,並單獨寫一個類來實現這個介面在邏輯上對應的資料存取,這樣資料庫就和方法分開了,外界呼叫方法時只知道這個方法可以實現什麼卻不知道具體細節和資料的儲存處理,保證程式碼的安全性和嚴密性。
4. 嘗試執行Test.java。根據註釋修改相應程式碼。結合參考程式碼回答使用DAO模式有什麼好處?
陣列實現
package stumanagement; public class Test { public static void main(String[] args) { Student[] students = new Student[4]; students[0] = new Student("Tom"); students[1]= new Student("Jerry"); students[2] = new Student("Sophia"); students[3] = new Student("Lay"); StudentDao sdm = new StudentDaoArrayImpl(50); //StudentDao sdm = new StudentDaoListImpl();//使用列表實現 //往後臺寫資料,無需考慮後臺是什麼(到底是資料庫、檔案、陣列、List) //因為這裡是面向StudentDao介面 System.out.println("===========寫入學生========"); for(Student e:students){ if (!sdm.addStudent(e)){ System.out.println("新增學生失敗"); }else{ System.out.println("插入成功!!"); } } System.out.println("===========顯示所有學生========"); sdm.diplayAllStudents(); System.out.println("===========查詢學生========"); Student temp = sdm.getStuByName("Tom") ; if(temp == null){ System.out.println("查無此人"); }else{ System.out.println(temp); } } }
執行結果
列表實現
package stumanagement;
public class Test {
public static void main(String[] args) {
Student[] students = new Student[4];
students[0] = new Student("Tom");
students[1]= new Student("Jerry");
students[2] = new Student("Sophia");
students[3] = new Student("Lay");
//StudentDao sdm = new StudentDaoArrayImpl(50);
StudentDao sdm = new StudentDaoListImpl();//使用列表實現
//往後臺寫資料,無需考慮後臺是什麼(到底是資料庫、檔案、陣列、List)
//因為這裡是面向StudentDao介面
System.out.println("===========寫入學生========");
for(Student e:students){
if (!sdm.addStudent(e)){
System.out.println("新增學生失敗");
}else{
System.out.println("插入成功!!");
}
}
System.out.println("===========顯示所有學生========");
sdm.diplayAllStudents();
System.out.println("===========查詢學生========");
Student temp = sdm.getStuByName("Tom") ;
if(temp == null){
System.out.println("查無此人");
}else{
System.out.println(temp);
}
}
}
執行結果
DAO模式好處
- 將三個方法和Student資料的具體訪問分開,資料庫的修改只要修改DAO層的訪問方式就可以了,不用整個專案都進行修改。
- 只要修改資料訪問方式就可以在不同資料庫平臺上使用,這裡使用了陣列和列表兩種方法訪問。