1. 程式人生 > 實用技巧 >互評-OO之介面-DAO模式程式碼閱讀及應用.xls

互評-OO之介面-DAO模式程式碼閱讀及應用.xls

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模式的優勢:

  • 資料訪問層程式碼變化不影響業務邏輯程式碼,功能單一,分工明確,安全;
  • 隔離了不同資料庫實現。可以實現多種資料結構儲存,且各方式之間互不影響,新增新方式方便,改變儲存方式方便。

5.可選:編寫一些使用DAO模式的程式碼。比如使用檔案作為購物車儲存底層。