Wzorce projektowe - wzorzec obiektu zerowego

We wzorcu Null Object obiekt pusty zastępuje sprawdzanie instancji obiektu NULL. Zamiast umieszczać if check for a null wartość, Null Object odzwierciedla relację „nic nie rób”. Taki obiekt Null może być również użyty do zapewnienia domyślnego zachowania w przypadku, gdy dane nie są dostępne.

We wzorcu Null Object tworzymy klasę abstrakcyjną określającą różne operacje do wykonania, konkretne klasy rozszerzające tę klasę oraz pustą klasę obiektową zapewniającą nic nie robiącą implementacji tej klasy i będą używane pozornie tam, gdzie musimy sprawdzić wartość null.

Realizacja

Mamy zamiar stworzyć AbstractCustomer abstrakcyjną klasę definiującą opearations. Tutaj nazwa klienta i konkretne klasy rozszerzające klasę AbstractCustomer . Tworzona jest klasa fabryczna CustomerFactory w celu zwrócenia obiektów RealCustomer lub NullCustomer na podstawie przekazanej nazwy klienta.

NullPatternDemo , nasza klasa demonstracyjna, użyje CustomerFactory do zademonstrowania użycia wzorca Null Object.

Krok 1

Utwórz klasę abstrakcyjną.

AbstractCustomer.java

public abstract class AbstractCustomer {
   protected String name;
   public abstract boolean isNil();
   public abstract String getName();
}

Krok 2

Utwórz konkretne klasy rozszerzające powyższą klasę.

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;
   }
}

Krok 3

Utwórz klasę 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();
   }
}

Krok 4

Użyj CustomerFactory, aby pobrać obiekty RealCustomer lub NullCustomer na podstawie przekazanej nazwy klienta.

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());
   }
}

Krok 5

Sprawdź dane wyjściowe.

Customers
Rob
Not Available in Customer Database
Julie
Not Available in Customer Database