JAVA設計模式-空對象模式

在空對象模式(Null Object Pattern)中,一個空對象取代 NULL 對象實例的檢查。Null 對象不是檢查空值,而是反應一個不做任何動作的關係。這樣的 Null 對象也可以在數據不可用的時候提供默認的行為。

在空對象模式中,我們創建一個指定各種要執行的操作的抽象類和擴展該類的實體類,還創建一個未對該類做任何實現的空對象類,該空對象類將無縫地使用在需要檢查空值的地方。

實現

我們將創建一個定義操作(在這裡,是客戶的名稱)的 AbstractCustomer 抽象類,和擴展了 AbstractCustomer 類的實體類。工廠類 CustomerFactory 基於客戶傳遞的名字來返回 RealCustomer 或 NullCustomer 對象。

NullPatternDemo,我們的演示類使用 CustomerFactory 來演示空對象模式的用法。

JAVA設計模式-空對象模式

步驟 1

創建一個抽象類。

AbstractCustomer.java

public abstract class AbstractCustomer { protected String name; public abstract boolean isNil(); public abstract String getName(); }

步驟 2

創建擴展了上述類的實體類。

RealCustomer.java

public class RealCustomer extends AbstractCustomer { public RealCustomer(String name) { this.name = name; } @Override public String getName() { return name; } @Override public boolean isNil() { return false; } }

NullCustomer.java

public class NullCustomer extends AbstractCustomer { @Override public String getName() { return "Not Available in Customer Database"; } @Override public boolean isNil() { return true; } }

步驟 3

創建 CustomerFactory 類。

CustomerFactory.java

public class CustomerFactory { public static final String[] names = {"Rob", "Joe", "Julie"}; public static AbstractCustomer getCustomer(String name){ for (int i = 0; i < names.length; i++) { if (names[i].equalsIgnoreCase(name)){ return new RealCustomer(name); } } return new NullCustomer(); } }

步驟 4

使用 CustomerFactory,基於客戶傳遞的名字,來獲取 RealCustomer 或 NullCustomer 對象。

NullPatternDemo.java

public class NullPatternDemo { public static void main(String[] args) { AbstractCustomer customer1 = CustomerFactory.getCustomer("Rob"); AbstractCustomer customer2 = CustomerFactory.getCustomer("Bob"); AbstractCustomer customer3 = CustomerFactory.getCustomer("Julie"); AbstractCustomer customer4 = CustomerFactory.getCustomer("Laura"); System.out.println("Customers"); System.out.println(customer1.getName()); System.out.println(customer2.getName()); System.out.println(customer3.getName()); System.out.println(customer4.getName()); } }

步驟 5

執行程序,輸出結果:

Customers

Rob

Not Available in Customer Database

Julie

Not Available in Customer Database


分享到:


相關文章: