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

祝学习愉快! (发现内容有误?请选中要编辑的内容 -> 右键 -> 修改 -> 提交!帮助我们改进教程质量)

精选教程推荐

👇 以下精选教程可能对您有帮助,拓展您的技术视野

DeepSeek-R1前沿入门课 -〔老刘〕

互联网人的数字化企业生存指南 -〔沈欣〕

计算机基础实战课 -〔彭东〕

商业思维案例笔记 -〔曹雄峰〕

超级访谈:对话汤峥嵘 -〔汤峥嵘〕

徐昊 · TDD项目实战70讲 -〔徐昊〕

手把手带你写一门编程语言 -〔宫文学〕

OAuth 2.0实战课 -〔王新栋〕

玩转webpack -〔程柳锋〕

📝 好记忆不如烂笔头,留下您的学习笔记吧!

暂无学习笔记,成为第一个分享的人吧!

您的笔记将帮助成千上万的学习者