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

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

教程推荐

结构思考力 · 透过结构看问题解决 -〔李忠秋〕

说透低代码 -〔陈旭〕

动态规划面试宝典 -〔卢誉声〕

跟月影学可视化 -〔月影〕

编译原理实战课 -〔宫文学〕

性能测试实战30讲 -〔高楼〕

即时消息技术剖析与实战 -〔袁武林〕

编辑训练营 -〔总编室〕

MySQL实战45讲 -〔林晓斌〕

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