Java設計模式
Java工廠設計模式
Java抽象工廠模式
Java單例模式
Java建造者(Builder)模式
Java原型模式
Java適配器模式
Java橋接模式
Java過濾器模式(條件模式)
Java組合模式
Java裝飾模式
Java門面模式(或外觀模式)
Java享元模式(Flyweight Pattern)
Java責任鏈模式
Java命令模式
Java迭代器模式
Java中介者模式(Mediator Pattern)
Java解釋器模式
Java備忘錄模式
Java觀察者模式
Java狀態模式
Java空對象模式
Java策略模式
Java模板模式
Java訪問者模式
Java MVC模式
Java業務代理模式
Java組合實體模式
Java數據訪問對象模式
Java前端控制器模式
Java攔截過濾器模式
Java服務定位器模式
Java傳輸對象模式
Java空對象模式
在「空對象」模式中,空對象將替換NULL
對象實例的檢查。而不是檢查一個空值,Null
對象反映一個無關的關係(即什麼也不做)。 這種Null
對象還可以用於在數據不可用時提供默認行爲。
在空對象模式(Null Object模式)中創建一個抽象類,指定要執行的各種操作。擴展此類的具體類和一個null對象類,不提供此類的任何實現,並且無需檢查空值。
實現實例
在這個實例中,將創建一個AbstractCustomer
抽象類來定義一些操作。這裏的客戶名稱和擴展AbstractCustomer
類的具體類。 創建工廠類CustomerFactory
用來根據傳遞給它的客戶名稱返回RealCustomer
或NullCustomer
對象。
NullPatternDemo
這是一個演示類,將使用CustomerFactory
演示使用空對象模式(Null Object)模式。
空對象示例的結構如下圖所示 -
第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