Wzorce projektowe - wzorzec obiektu zerowego
We wzorcu Null Object obiekt pusty zastępuje sprawdzanie instancji obiektu NULL. Zamiast umieszczać if check for a null wartość, Null Object odzwierciedla relację „nic nie rób”. Taki obiekt Null może być również użyty do zapewnienia domyślnego zachowania w przypadku, gdy dane nie są dostępne.
We wzorcu Null Object tworzymy klasę abstrakcyjną określającą różne operacje do wykonania, konkretne klasy rozszerzające tę klasę oraz pustą klasę obiektową zapewniającą nic nie robiącą implementacji tej klasy i będą używane pozornie tam, gdzie musimy sprawdzić wartość null.
Realizacja
Mamy zamiar stworzyć AbstractCustomer abstrakcyjną klasę definiującą opearations. Tutaj nazwa klienta i konkretne klasy rozszerzające klasę AbstractCustomer . Tworzona jest klasa fabryczna CustomerFactory w celu zwrócenia obiektów RealCustomer lub NullCustomer na podstawie przekazanej nazwy klienta.
NullPatternDemo , nasza klasa demonstracyjna, użyje CustomerFactory do zademonstrowania użycia wzorca Null Object.
Krok 1
Utwórz klasę abstrakcyjną.
AbstractCustomer.java
public abstract class AbstractCustomer {
protected String name;
public abstract boolean isNil();
public abstract String getName();
}
Krok 2
Utwórz konkretne klasy rozszerzające powyższą klasę.
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;
}
}
Krok 3
Utwórz klasę 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();
}
}
Krok 4
Użyj CustomerFactory, aby pobrać obiekty RealCustomer lub NullCustomer na podstawie przekazanej nazwy klienta.
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());
}
}
Krok 5
Sprawdź dane wyjściowe.
Customers
Rob
Not Available in Customer Database
Julie
Not Available in Customer Database