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