1. 程式人生 > >設計模式(32)-----行為型模式-----空物件設計模式

設計模式(32)-----行為型模式-----空物件設計模式

在空物件模式(Null Object Pattern)中,一個空物件取代 NULL 物件例項的檢查。Null 物件不是檢查空值,而是反應一個不做任何動作的關係。這樣的 Null 物件也可以在資料不可用的時候提供預設的行為。

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

 

我們將建立一個定義操作(在這裡,是客戶的名稱)的 AbstractCustomer 抽象類,和擴充套件了 AbstractCustomer 類的實體類。工廠類 CustomerFactory

 基於客戶傳遞的名字來返回 RealCustomer 或 NullCustomer 物件。

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

 

步驟 1

建立一個抽象類。

package com.DesignPatterns.ap.NullObject1;

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

 

步驟 2

建立擴充套件了上述類的實體類。

package com.DesignPatterns.ap.NullObject1;

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

 

public class NullCustomer extends AbstractCustomer {
    
    @Override
    public String getName() {
       return "沒有發現該名字的人";
    }
  
    @Override
    public boolean isNil() {
       return true;
    }
 }

 

步驟 3

建立 CustomerFactory 類。

 

package com.DesignPatterns.ap.NullObject1;

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();
    }
 }

 

 

 

 

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("name:"+customer1.getName()+"。======isNil:"+customer1.isNil());
       System.out.println("name:"+customer2.getName()+"。======isNil:"+customer2.isNil());
       System.out.println("name:"+customer3.getName()+"。======isNil:"+customer3.isNil());
       System.out.println("name:"+customer4.getName()+"。======isNil:"+customer4.isNil());
    }
 }

 

 

Customers
name:Rob。======isNil:false
name:沒有發現該名字的人。======isNil:true
name:Julie。======isNil:false
name:沒有發現該名字的人。======isNil:true