代码中到处都是处理null字段或变量的重复逻辑。
将null逻辑替换为一个Null Object, 提供一个正确的null行为对象。
示例:
public interface ICustomer {
public boolean isNull();
public String getName();
}
public class Customer implements ICustomer {
private String name;
public Customer(String name) {
this.name = name;
}
public String getName() {
return name;
}
public boolean isNull() {
return false;
}
}
public class NullCustomer implements ICustomer {
public String getName() {
return "Not Available";
}
public boolean isNull() {
return true;
}
}
public class CustomerFactory {
public static final String[] names = {"Tom", "Jerry", "Allen"};
public static ICustomer getCustomer(String name){
for (int i = 0; i < names.length; i++) {
if (names[i].equalsIgnoreCase(name)){
return new Customer(name);
}
}
return new NullCustomer();
}
}
测试代码
public class NullPatternDemo {
public static void main(String[] args) {
ICustomer customer1 = CustomerFactory.getCustomer("Tom");
ICustomer customer2 = CustomerFactory.getCustomer("Jeff");
ICustomer customer3 = CustomerFactory.getCustomer("Jerry");
ICustomer customer4 = CustomerFactory.getCustomer("Sunny");
System.out.println(customer1.getName());
System.out.println(customer2.getName());
System.out.println(customer3.getName());
System.out.println(customer4.getName());
}
}
输出:
Tom
Not Available
Jerry
Not Available