空对象模式:一个空对象取代null对象实例的检查,null对象不是检查空值,而是反应一个不做任何动作的关系。这样的null对象也可以在数据不可用的时候提供默认的行为,此类Null对象还可用于提供默认行为。

空对象模式实例

我们将创建一个定义外观的 AbstractCustomer 抽象类。这里的客户名称和扩展 AbstractCustomer 类的具体类。创建工厂类 CustomerFactory 以根据传递给它的客户名称返回 RealCustomer 或 NullCustomer 对象。

我们的演示类 NullPatternDemo 将使用 CustomerFactory 来演示Null Object模式的使用。

Null Object Pattern UML Diagram

第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

这一章你学到了什么?来做个笔记,好记忆不如烂笔头! 如果觉得对您有帮助,麻烦帮分享给您的朋友。

祝学习愉快! (如果觉得不正确,选中要修改的内容->右键->编辑)

点我分享笔记