Java 空對象設計模式(Null Object Pattern) 講解


有時候我們的代碼中為避免 NullPointerException 會出現很多的對Null的判斷語句,而這些語句一旦多起來,我們的代碼就會變的慘不忍睹,因此我們引入了空對象模式(null object pattern)以此來使我們的代碼變的更優雅一點。

下面來看一下空對象模式的大概視圖

為了方便我這里就直接用手寫的了,大家諒解一下:) ,湊合着看吧

假如我們需要查詢某個學生的信息,我們輸入學號來進行查詢,如果沒有這個學生的話,我們就返回一個空對象,以此來實現空對象模式。

下面是我的代碼實現。

import java.util.Scanner;



//首先我定義一個為查詢和空對象的類定義一個共同的接口
interface AbstractCustomer{
	String query();
}

//查詢學號的具體實現
class RealObject implements AbstractCustomer{
	@Override
	public String query() {
		//這里你也可以返回一些別的有用的東西,我這里為了演示就返回一個字符串
		return "successful";
	}
}

//空對象類的實現
class NullObject implements AbstractCustomer{
	@Override
	public String query() {
		return "can not find this student";
	}
}

//建造工廠
class CustomerFactory{
	//我們假定這是我們儲存學生學號的數據庫,現在我們獲取到了,把它裝到我們的數組里
	int[] arr = {1,2,3,4,5};
	
	public AbstractCustomer query(){
		//模擬查詢學號
		Scanner scanner = new Scanner(System.in);
		System.out.println("please input student_id:\n");
		int index = scanner.nextInt();
		for(int i : arr){
			if(i == index){
				return new RealObject();
			}
		}
		//如果沒有查找到的話我們直接返回一個空對象
		return new NullObject();
	}
}

//接下來是客戶端方面,我們直接操作工廠即可
public class Main {
	static void customer(CustomerFactory cf){
		//先調用工廠的query返回一個對象,然后再用這個對象調用自己的query
		String s = cf.query().query();
		System.out.println(s);
	}
	public static void main(String[] args){
		customer(new CustomerFactory());
	}
}

上面則是描述的空對象模式,當我們需要較多的判斷是否為null時,可以用到這個模式,以上代碼還可以給接口再添加一個isNull方法來確切的判斷是否為Null。

我們來執行一下這個程序

接下來我們輸入一個數組里沒有的數據

以上就是空對象模式的講解,如果大家有任何疑問可以在回復區給我回復,謝謝:)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM