“原文地址”:http://www.work100.net/training/monolithic-architecture-design-patterns-null-object-pattern.html
更多教程:光束云 - 免[费课程

「空《对象》模式」

“序号” (文内章节) ‘视频’
1 概述 -
2 实现 -

请参照如上(章节导航)进行阅读

1.概述

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

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

2.实现

我们将创建一个定义操作(在这里,<是客>户 的[名称) 的[ AbstractCustomer 『抽象类』,<和扩展了> AbstractCustomer 类 的[实体类。

工厂类 CustomerFactory 基于客户传递 的[名字来返回 RealCustomer ‘或’ NullCustomer 《对象》。

NullPatternDemo,我们 的[演示类使用 CustomerFactory 来演示「空《对象》模式」 的[用法。

{步}骤 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

上一篇:状态模式
下一篇:策略模式


【如果对课程内容感兴趣】,可以扫码关注我们 的[ 公众号 ‘或’ QQ群,及时关注我们 的[课程更“新”