Java 空对象模式

Java 空对象模式 首页 / 设计模式入门教程 / Java 空对象模式

空对象模式:一个空对象取代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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

深入剖析Kubernetes -〔张磊〕

Linux性能优化实战 -〔倪朋飞〕

说透中台 -〔王健〕

分布式系统案例课 -〔杨波〕

张汉东的Rust实战课 -〔张汉东〕

etcd实战课 -〔唐聪〕

React Hooks 核心原理与实战 -〔王沛〕

快手 · 音视频技术入门课 -〔刘歧〕

运维监控系统实战笔记 -〔秦晓辉〕

好记忆不如烂笔头。留下您的足迹吧 :)