网站设计模式 专题
您的位置:web > 网站设计模式专题 > 空对象模式
空对象模式
作者:--    发布时间:2019-11-20

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

在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。

实现

我们将创建一个定义操作(在这里,是客户的名称)的 abstractcustomer 抽象类,和扩展了 abstractcustomer 类的实体类。工厂类 customerfactory 基于客户传递的名字来返回 realcustomernullcustomer 对象。

nullpatterndemo,我们的演示类使用 customerfactory 来演示空对象模式的用法。

空对象模式的 uml 图

步骤 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,基于客户传递的名字,来获取 realcustomernullcustomer 对象。

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
网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册