有時候我們的代碼中為避免 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。
我們來執行一下這個程序

接下來我們輸入一個數組里沒有的數據
新聞熱點
疑難解答