設計模式(3)空對象設計模式

有時候咱們的代碼中爲避免 NullPointerException 會出現不少的對Null的判斷語句,而這些語句一旦多起來,咱們的代碼就會變的慘不忍睹,所以咱們引入了空對象模式(Null Object Pattern)以此來使咱們的代碼變的更優雅一點.設計模式

第一步:建立一個抽象基類,代碼以下ide

package com.test;
/**
 * 這是抽象基類
 * @author 歐陽飄
 */
public abstract class AbstractCustomer {
   protected String name;
   public abstract boolean isNil();
   public abstract String getName();
}

 

第二部:建立擴展上述類的具體類,其代碼以下this

package com.test;
/**
 * 真實存在的具體類
 * @author 歐陽飄
 */
public class RealCustomer extends AbstractCustomer {
   public RealCustomer(String name) {
      this.name = name;
   }
   @Override
   public String getName() {
      return name;
   }
   //判斷是不是空對象
   @Override
   public boolean isNil() {
      return false;
   }
}spa

/**
 * 空對象的具體類
 * @author Administrator
 *
 */
public class NullCustomer extends AbstractCustomer {
   @Override
   public String getName() {
      return "這個對象是空對象";
   }
   //判斷是不是空對象
   @Override
   public boolean isNil() {
      return true;
   }
}.net

 

第三部:建立一個CustomerFactory類,其代碼以下設計

/**
 * 
 * @author 歐陽飄
 * 建立客戶的工廠類:若是客戶名稱能夠查詢出來,那麼就返回真實的對象,若是不存在那麼就返回空客戶對象
 */
public class CustomerFactory {
   public static final String[] customNames = {"jack", "ouyang", "LaLa"};
   public static AbstractCustomer getCustomer(String name){
      for (int i = 0; i < customNames.length; i++) {
         if (customNames[i].equalsIgnoreCase(name)){
            return new RealCustomer(name);
         }
      }
      return new NullCustomer();
   }
}

 

第四部:建立演示Demo程序,運行結果以下圖所示指針

經過上述咱們得出空對象設計模式類圖以下:code

空對象設計模式的優勢:對象

(1)它能夠增強系統的穩固性,能有有效地防止空指針報錯對整個系統的影響,使系統更加穩定。
(2)它可以實現對空對象狀況的定製化的控制,可以掌握處理空對象的主動權。
(3)它並不依靠Client來保證整個系統的穩定運行。
(4)它經過isNull對==null的替換,顯得更加優雅,更加易懂。ci

相關文章
相關標籤/搜索