鍍金池/ 教程/ Java/ Java空對(duì)象模式
Java前端控制器模式
Java工廠設(shè)計(jì)模式
Java抽象工廠模式
Java觀察者模式
Java門面模式(或外觀模式)
Java備忘錄模式
Java MVC模式
Java單例模式
Java傳輸對(duì)象模式
Java迭代器模式
Java責(zé)任鏈模式
Java命令模式
Java原型模式
Java解釋器模式
Java適配器模式
Java狀態(tài)模式
Java中介者模式(Mediator Pattern)
Java攔截過(guò)濾器模式
Java策略模式
Java組合模式
Java業(yè)務(wù)代理模式
Java裝飾模式
Java模板模式
Java橋接模式
Java過(guò)濾器模式(條件模式)
Java享元模式(Flyweight Pattern)
Java建造者(Builder)模式
Java設(shè)計(jì)模式
Java空對(duì)象模式
Java數(shù)據(jù)訪問(wèn)對(duì)象模式
Java訪問(wèn)者模式
Java組合實(shí)體模式
Java服務(wù)定位器模式

Java空對(duì)象模式

在“空對(duì)象”模式中,空對(duì)象將替換NULL對(duì)象實(shí)例的檢查。而不是檢查一個(gè)空值,Null對(duì)象反映一個(gè)無(wú)關(guān)的關(guān)系(即什么也不做)。 這種Null對(duì)象還可以用于在數(shù)據(jù)不可用時(shí)提供默認(rèn)行為。

在空對(duì)象模式(Null Object模式)中創(chuàng)建一個(gè)抽象類,指定要執(zhí)行的各種操作。擴(kuò)展此類的具體類和一個(gè)null對(duì)象類,不提供此類的任何實(shí)現(xiàn),并且無(wú)需檢查空值。

實(shí)現(xiàn)實(shí)例

在這個(gè)實(shí)例中,將創(chuàng)建一個(gè)AbstractCustomer抽象類來(lái)定義一些操作。這里的客戶名稱和擴(kuò)展AbstractCustomer類的具體類。 創(chuàng)建工廠類CustomerFactory用來(lái)根據(jù)傳遞給它的客戶名稱返回RealCustomerNullCustomer對(duì)象。

NullPatternDemo這是一個(gè)演示類,將使用CustomerFactory演示使用空對(duì)象模式(Null Object)模式。

空對(duì)象示例的結(jié)構(gòu)如下圖所示 -

第1步

創(chuàng)建一個(gè)抽象類,其代碼如下 -
AbstractCustomer.java

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

第2步

創(chuàng)建擴(kuò)展上述類的具體類,其代碼如下 -
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步

創(chuàng)建一個(gè)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根據(jù)傳遞給它的客戶名稱獲取RealCustomerNullCustomer對(duì)象。

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步

驗(yàn)證輸出,執(zhí)行上面的代碼得到以下結(jié)果 -

Customers
Rob
Not Available in Customer Database
Julie
Not Available in Customer Database