Шаблоны проектирования - шаблон нулевого объекта

В шаблоне нулевого объекта пустой объект заменяет проверку экземпляра объекта NULL. Вместо установки проверки if на нулевое значение, Null Object отражает отношение «ничего не делать». Такой объект Null также может использоваться для обеспечения поведения по умолчанию в случае, если данные недоступны.

В шаблоне «нулевой объект» мы создаем абстрактный класс, определяющий различные операции, которые должны быть выполнены, конкретные классы, расширяющие этот класс, и класс нулевого объекта, не выполняющий никаких действий по реализации этого класса, и будут использоваться без всяких сомнений там, где нам нужно проверить нулевое значение.

Реализация

Мы собираемся создать абстрактный класс AbstractCustomer, определяющий операции. Здесь имя клиента и конкретные классы, расширяющие класс AbstractCustomer . Заводской класс CustomerFactory создается для возврата объектов RealCustomer или NullCustomer в зависимости от переданного ему имени клиента.

NullPatternDemo , наш демонстрационный класс, будет использовать CustomerFactory для демонстрации использования шаблона Null Object.

Шаг 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