Pattern di progettazione - Pattern di oggetti nulli

In Null Object pattern, un oggetto null sostituisce il controllo dell'istanza dell'oggetto NULL. Invece di mettere if check per un valore nullo, Null Object riflette una relazione non fare nulla. Tale oggetto Null può anche essere utilizzato per fornire un comportamento predefinito nel caso in cui i dati non siano disponibili.

In Null Object pattern, creiamo una classe astratta che specifica varie operazioni da eseguire, classi concrete che estendono questa classe e una classe di oggetto null che non fornisce alcuna implementazione di questa classe e verrà utilizzata in modo invisibile quando è necessario controllare il valore null.

Implementazione

Creeremo una classe astratta AbstractCustomer che definisce le operazioni. Qui il nome del cliente e le classi concrete che estendono la classe AbstractCustomer . Viene creata una classe factory CustomerFactory per restituire oggetti RealCustomer o NullCustomer in base al nome del cliente passato ad esso.

NullPatternDemo , la nostra classe demo, utilizzerà CustomerFactory per dimostrare l'uso del pattern Null Object.

Passo 1

Crea una classe astratta.

AbstractCustomer.java

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

Passo 2

Crea classi concrete che estendono la classe precedente.

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

Passaggio 3

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

Passaggio 4

Utilizzare CustomerFactory per ottenere oggetti RealCustomer o NullCustomer in base al nome del cliente passato ad esso.

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

Passaggio 5

Verifica l'output.

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