Padrões de projeto - padrão de objeto nulo

No padrão Null Object, um objeto nulo substitui a verificação da instância do objeto NULL. Em vez de colocar if check para um valor nulo, Null Object reflete um relacionamento não fazer nada. Esse objeto Nulo também pode ser usado para fornecer comportamento padrão caso os dados não estejam disponíveis.

No padrão Objeto Nulo, criamos uma classe abstrata especificando várias operações a serem feitas, classes concretas que estendem essa classe e uma classe de objeto nulo que não fornece nenhuma implementação dessa classe e será usada sem problemas onde precisamos verificar o valor nulo.

Implementação

Vamos criar uma classe abstrata AbstractCustomer definindo operações. Aqui, o nome do cliente e as classes concretas que estendem a classe AbstractCustomer . A classe de fábrica CustomerFactory é criado para retornar tanto RealCustomer ou NullCustomer objetos com base no nome do cliente passado para ele.

NullPatternDemo , nossa classe de demonstração, usará CustomerFactory para demonstrar o uso do padrão Null Object.

Passo 1

Crie uma classe abstrata.

AbstractCustomer.java

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

Passo 2

Crie classes concretas estendendo a classe acima.

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

etapa 3

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

Passo 4

Use o CustomerFactory para obter qualquer RealCustomer ou NullCustomer objetos com base no nome do cliente passado para ele.

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

Etapa 5

Verifique a saída.

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