Entwurfsmuster - Nullobjektmuster
Im Nullobjektmuster ersetzt ein Nullobjekt die Überprüfung der NULL-Objektinstanz. Anstatt zu setzen, ob nach einem Nullwert gesucht wird, spiegelt Null Object eine Do-Nothing-Beziehung wider. Ein solches Null-Objekt kann auch verwendet werden, um ein Standardverhalten bereitzustellen, falls keine Daten verfügbar sind.
Im Nullobjektmuster erstellen wir eine abstrakte Klasse, in der verschiedene auszuführende Operationen angegeben sind, konkrete Klassen, die diese Klasse erweitern, und eine Nullobjektklasse, die keine Implementierung dieser Klasse ermöglicht, und werden scheinbar dort verwendet, wo der Nullwert überprüft werden muss.
Implementierung
Wir werden eine abstrakte AbstractCustomer-Klasse erstellen , die Operationen definiert. Hier der Name der Kunden- und konkreten Klassen, die die AbstractCustomer- Klasse erweitern. Eine Factory-Klasse CustomerFactory wird erstellt, um entweder RealCustomer- oder NullCustomer- Objekte basierend auf dem Namen des an sie übergebenen Kunden zurückzugeben.
NullPatternDemo , unsere Demo-Klasse, verwendet CustomerFactory , um die Verwendung des Null-Objekt-Musters zu demonstrieren.
Schritt 1
Erstellen Sie eine abstrakte Klasse.
AbstractCustomer.java
public abstract class AbstractCustomer {
protected String name;
public abstract boolean isNil();
public abstract String getName();
}
Schritt 2
Erstellen Sie konkrete Klassen, die die obige Klasse erweitern.
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;
}
}
Schritt 3
Erstellen Sie eine CustomerFactory- Klasse.
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();
}
}
Schritt 4
Verwenden Sie die CustomerFactory , um entweder RealCustomer- oder NullCustomer- Objekte basierend auf dem Namen des an sie übergebenen Kunden abzurufen .
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());
}
}
Schritt 5
Überprüfen Sie die Ausgabe.
Customers
Rob
Not Available in Customer Database
Julie
Not Available in Customer Database