Nel Null Object Pattern, un oggetto NULL sostituisce il controllo dell’istanza di tale oggetto. Sostanzialmente, non bisognerà più controllare se l’istanza dell’ Oggetto è NULL. Tale oggetto Null può anche essere utilizzato per fornire un comportamento predefinito nel caso in cui i dati non siano disponibili.
Per implementare il pattern, creiamo una classe astratta specificando le varie operazioni da eseguire, dopo di chè creiamo le classi concrete che la estendono ed una classe di oggetti null che non fornisce alcuna implementazione, ma verrà utilizzata esattamente come check di istanza null.
DIAGRAMMA UML
IMPLEMENTAZIONE NULL OBJECT
Step 1: Creiamo la classe astratta
public abstract class Cliente {
protected String nome;
public abstract boolean isNull();
public abstract String getNome();
}
Step 2: Creiamo le classi concrete
ClienteReale.java
public class ClienteReale extends Cliente {
public ClienteReale(String nome) {
this.nome = nome;
}
@Override
public String getNome() {
System.out.println("[CLIENTEREALE]: getNome()::start");
System.out.println("[CLIENTEREALE]: getNome()::end");
return "[CLIENTEREALE]: "+nome;
}
@Override
public boolean isNull() {
return false;
}
}
ClienteNullo.java
public class ClienteNullo extends Cliente {
@Override
public String getNome() {
System.out.println("[CLIENTENULLO]: getNome()::start");
System.out.println("[CLIENTENULLO]: getNome()::end");
return "[CLIENTENULLO]: Cliente non trovato!";
}
@Override
public boolean isNull() {
return true;
}
}
Step 3: Creiamo la factory
public class ClienteFactory {
public static final String[] nomi = {"Roberto", "Giovanni", "Giulia"};
public static Cliente getNome(String name){
for (int i = 0; i < nomi.length; i++) {
if (nomi[i].equalsIgnoreCase(name)){
return new ClienteReale(name);
}
}
return new ClienteNullo();
}
}
Step 4: Creiamo il main
public class Main {
public static void main(String[] args) {
Cliente cliente1 = ClienteFactory.getNome("Roberto");
Cliente cliente2 = ClienteFactory.getNome("Giovanni");
Cliente cliente3 = ClienteFactory.getNome("Giulia");
Cliente cliente4 = ClienteFactory.getNome("Antonio");
System.out.println("[MAIN]: Lista clienti");
System.out.println(cliente1.getNome());
System.out.println(cliente2.getNome());
System.out.println(cliente3.getNome());
System.out.println(cliente4.getNome());
}
}
Step 5: Output
[MAIN]: Lista clienti
[CLIENTEREALE]: getNome()::start
[CLIENTEREALE]: getNome()::end
[CLIENTEREALE]: Roberto
[CLIENTEREALE]: getNome()::start
[CLIENTEREALE]: getNome()::end
[CLIENTEREALE]: Giovanni
[CLIENTEREALE]: getNome()::start
[CLIENTEREALE]: getNome()::end
[CLIENTEREALE]: Giulia
[CLIENTENULLO]: getNome()::start
[CLIENTENULLO]: getNome()::end
[CLIENTENULLO]: Cliente non trovato!
0 Comments