Entwurfsmuster - Nullobjektmuster

Im Nullobjektmuster ersetzt ein Nullobjekt die Überprüfung der NULL-Objektinstanz. Anstatt zu setzen, ob nach einem Nullwert gesucht wird, spiegelt Null Object eine Do-Nothing-Beziehung wider. Ein solches Null-Objekt kann auch verwendet werden, um ein Standardverhalten bereitzustellen, falls keine Daten verfügbar sind.

Im Nullobjektmuster erstellen wir eine abstrakte Klasse, in der verschiedene auszuführende Operationen angegeben sind, konkrete Klassen, die diese Klasse erweitern, und eine Nullobjektklasse, die keine Implementierung dieser Klasse ermöglicht, und werden scheinbar dort verwendet, wo der Nullwert überprüft werden muss.

Implementierung

Wir werden eine abstrakte AbstractCustomer-Klasse erstellen , die Operationen definiert. Hier der Name der Kunden- und konkreten Klassen, die die AbstractCustomer- Klasse erweitern. Eine Factory-Klasse CustomerFactory wird erstellt, um entweder RealCustomer- oder NullCustomer- Objekte basierend auf dem Namen des an sie übergebenen Kunden zurückzugeben.

NullPatternDemo , unsere Demo-Klasse, verwendet CustomerFactory , um die Verwendung des Null-Objekt-Musters zu demonstrieren.

Schritt 1

Erstellen Sie eine abstrakte Klasse.

AbstractCustomer.java

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

Schritt 2

Erstellen Sie konkrete Klassen, die die obige Klasse erweitern.

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

Schritt 3

Erstellen Sie eine CustomerFactory- Klasse.

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

Schritt 4

Verwenden Sie die CustomerFactory , um entweder RealCustomer- oder NullCustomer- Objekte basierend auf dem Namen des an sie übergebenen Kunden abzurufen .

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

Schritt 5

Überprüfen Sie die Ausgabe.

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