互評-OO之介面-DAO模式程式碼閱讀及應用.xls
阿新 • • 發佈:2020-10-25
1. StudenDaoListImpl.java與StudentDaoArrayImpl.java有何不同?
兩個java檔案裡面的程式碼如下:
//StudenDaoListImpl.java package stumanagement; import java.util.ArrayList; import java.util.List; public class StudenDaoListImpl implements StudentDao { private List<Student> students = new ArrayList<Student>(); @Override public Student getStuByName(String name) { Student temp = null; for(Student e:students){ if(e.getName().equals(name)){ temp = e; } } return temp; } @Override public boolean addStudent(Student student) { students.add(student); return true; } @Override public void diplayAllStudents(){ for(Student e:students){ if (e != null) System.out.println(e); } } } //StudentDaoArrayImpl.java package stumanagement; public class StudentDaoArrayImpl implements StudentDao { private Student[] students; public StudentDaoArrayImpl(int size) { students = new Student[size]; } @Override public Student getStuByName(String name) { Student temp = null; for(int i=0; i<students.length;i++){ if(students[i]!= null){ if (students[i].getName().equals(name)){ temp = students[i]; break; } } } return temp; } @Override public boolean addStudent(Student student) { boolean success = false; for(int i=0; i<students.length;i++){ if(students[i]==null){ students[i] = student; success = true; break; } } return success; } @Override public void diplayAllStudents(){ for(Student e:students){ if (e != null) System.out.println(e); } } }
首先,兩種方法都實現了相同的三個功能:
- getStuByName(String name) 查詢學生資訊;
- addStudent(Student student) 新增學生;
- diplayAllStudents() 顯示所有學生;
但是每一個功能的實現方式不同。原因是每個方法對於學生資料的儲存的資料結構不同。StudenDaoListImpl.java利用List列表的方式儲存,StudentDaoArrayImpl.java利用陣列的方式儲存。
2. StudentDao.java檔案是幹什麼用的?為什麼裡面什麼實現程式碼都沒有?
StudentDao.java檔案只說明瞭業務邏輯為如何,將資料庫的所有操作定義成抽象方法,可以提供多種資料結構方式實現。(就是確定你要實現何種功能,具體的功能實現可以有自己的方法)。該檔案為DAO介面,只有方法宣告,沒有方法的具體實現。
3. 使用搜索引擎搜尋“Java DAO”,選出幾句你能看懂的、對你最有啟發的話。請結合介面知識去理解。
參考文章:https://www.runoob.com/note/27029
DAO 模式的優勢就在於它實現了兩次隔離:
1、隔離了資料訪問程式碼和業務邏輯程式碼。業務邏輯程式碼直接呼叫DAO方法即可,完全感覺不到資料庫表的存在。分工明確,資料訪問層程式碼變化不影響業務邏輯程式碼,這符合單一職能原則,降低了藕合性,提高了可複用性。
2、隔離了不同資料庫實現。採用面向介面程式設計,如果底層資料庫變化,如由 MySQL 變成 Oracle 只要增加 DAO 介面的新實現類即可,原有 MySQ 實現不用修改。這符合 "開-閉" 原則。該原則降低了程式碼的藕合性,提高了程式碼擴充套件性和系統的可移植性。
理解:
- 業務邏輯程式碼,即你要實現的功能函式。DAO模式隔離了資料訪問程式碼和業務邏輯程式碼,即DAO介面只需要定義方法,具體用何種方式實現功能他就不再過問了。在測試函式中,可以選擇不同的資料結構進行儲存,各個檔案,類之間分工明確。程式碼的擴充套件性也更好。
- 面向介面程式設計就是面向共同行為進行程式設計。可以將介面宣告與實現分離開,從而大大提高程式的靈活性。DAO模式的靈活性體現在,如果想要將儲存的方式改變,只需要在DAO介面新增一個新的實現類就行,方便快速。
- 看見隔離這個詞,第一個想到的概念就是“安全”。資料功能的實現與其他程式碼之間被DAO介面檔案隔離,就算底層資料崩潰了與我上層檔案關係不大,安全。
4. 嘗試執行Test.java。根據註釋修改相應程式碼。結合參考程式碼回答使用DAO模式有什麼好處?
DAO模式的優勢:
- 資料訪問層程式碼變化不影響業務邏輯程式碼,功能單一,分工明確,安全;
- 隔離了不同資料庫實現。可以實現多種資料結構儲存,且各方式之間互不影響,新增新方式方便,改變儲存方式方便。