Null Object Pattern in Java


empty object mode

In the Null Object Pattern, an empty object replaces the check of a NULL object instance. Null objects do not check for null values, but instead react to a relationship that does nothing. Such Null objects can also provide default behavior when data is not available.

In the empty object pattern, we create an abstract class that specifies the various operations to be performed and an entity class that extends the class, and also creates an empty object class that does not implement any implementation of the class. Use seamlessly where you need to check for null values.

Implementation

We will create an AbstractCustomer abstract class that defines the operation (here, the name of the client), and an entity class that extends the AbstractCustomer class. The factory class CustomerFactory returns the RealCustomer or NullCustomer object based on the name passed by the client.

NullPatternDemo, our demo class uses CustomerFactory to demonstrate the use of empty object patterns.

null_pattern_uml_diagram

Step 1

Create an abstract class.

AbstractCustomer.java

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

Step 2

Create an entity class that extends the above classes.

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

Step 3

Create the CustomerFactory class.

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

Step 4

Use CustomerFactory to get the RealCustomer or NullCustomer object based on the name passed by the client.

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

Step 5

Executing the program, outputting results:

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





javacodegeeks is optimized for learning.© javacodegeeks .
All Right Reserved and you agree to have read and accepted our term and condition