1. 程式人生 > 實用技巧 >Leetcode 34 Find First and Last Position of Element in Sorted Array

Leetcode 34 Find First and Last Position of Element in Sorted Array

1.StudentDaoListImpl.java與StudentDaoArrayImpl.java有何不同?

StudenDaoListImpl.java是用列表的方式儲存學生資訊,StudentDaoArrayImpl.java是用陣列來儲存學生資訊。兩者在查詢和新增兩個方法有所不同,查詢:StudenDaoListImpl.java從頭開始判斷名字是否相同,StudentDaoArrayImpl.java先要判斷該元素不為空,在判斷名字是否相同;新增:StudenDaoListImpl.java直接用列表的add方法在列表末尾新增,StudentDaoArrayImpl.java是從頭開始找空的元素,將其存放進去。兩者的顯示方法差不多。

2.StudentDao.java檔案是幹什麼用的?為什麼裡面什麼實現程式碼都沒有?

定義一個StudentDao介面,裡面有三個方法的宣告,其他類通過繼承StudentDao類,實現StudentDao.java檔案中的方法,子類可以有著相同的三個方法宣告,不同的子類也可以根據不同的要求寫出不一樣的方法程式碼。

3. 使用搜索引擎搜尋“Java DAO”,選出幾句你能看懂的、對你最有啟發的話。請結合介面知識去理解。

4. 嘗試執行Test.java。根據註釋修改相應程式碼。結合參考程式碼回答使用DAO模式有什麼好處?

package stumanagement;

public class Test {

	public static void main(String[] args) {
		Student[] students = new Student[3];
		students[0] = new Student("Tom");
		students[1]= new Student("Jerry");
		students[2] = new Student("Sophia");

		
		StudentDao sdm = new StudentDaoArrayImpl(50);//使用陣列實現
		//StudentDao sdm = new StudenDaoListImpl();//使用列表實現
		
		//往後臺寫資料,無需考慮後臺是什麼(到底是資料庫、檔案、陣列、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);
		}


	}

}

兩個類都繼承了StudentDao,執行結果相同。

好處:

通過StudentDao介面,可以建立兩個不同的子類sdm,進行插入,查詢,顯示學生資訊。兩個子類通過不同的程式碼實現StudentDao接口裡的方法,使得兩個子類的執行結果都相同。

1.資料儲存邏輯的分離:一方面避免業務程式碼中混雜的JDBC程式碼,另一方面,資料訪問介面與資料訪問實現相分離,這樣精通資料庫的人可以根據介面專注於資料庫訪問的最優化實現,而精通業務的人可以專注於業務邏輯編碼。

2.資料訪問底層實現的分離:DAO模式將資料訪問分為抽象層和實現層,分離了資料使用和資料訪問的底層實現細節。這樣可以在保持上層結構不變的情況下,通過更改底層實現來修改資料訪問的機制,比如只要通過修改資料訪問層實現,我們就可以部署在不同資料庫平臺上。

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