简介

在空对象模式中,创建一个无业务对象,包括null对象。
我们使用无业务对象来替换空指针检查。
我们称之为一个无业务的对象Null对象。
Null对象在数据不可用时提供默认行为。
在空对象模式中,我们通常创建一个抽象类来指定各种操作。
Null Object和具体类都将扩展这个抽象类。
Null Object类只提供空逻辑。

  1. abstract class AbstractEmployee {
  2. protected String name;
  3. public abstract boolean isNull();
  4. public abstract String getName();
  5. }
  6. class Programmer extends AbstractEmployee {
  7. public Programmer(String name) {
  8. this.name = name;
  9. }
  10. @Override
  11. public String getName() {
  12. return name;
  13. }
  14. @Override
  15. public boolean isNull() {
  16. return false;
  17. }
  18. }
  19. class NullCustomer extends AbstractEmployee {
  20. @Override
  21. public String getName() {
  22. return "Not Available";
  23. }
  24. @Override
  25. public boolean isNull() {
  26. return true;
  27. }
  28. }
  29. class EmployeeFactory {
  30. public static final String[] names = {"Rob", "Joe", "Jack"};
  31. public static AbstractEmployee getCustomer(String name){
  32. for (int i = 0; i < names.length; i++) {
  33. if (names[i].equalsIgnoreCase(name)){
  34. return new Programmer(name);
  35. }
  36. }
  37. return new NullCustomer();
  38. }
  39. }
  40. public class Main {
  41. public static void main(String[] args) {
  42. AbstractEmployee emp = EmployeeFactory.getCustomer("Rob");
  43. AbstractEmployee emp2 = EmployeeFactory.getCustomer("Bob");
  44. AbstractEmployee emp3 = EmployeeFactory.getCustomer("Jack");
  45. AbstractEmployee emp4 = EmployeeFactory.getCustomer("Tom");
  46. System.out.println(emp.getName());
  47. System.out.println(emp2.getName());
  48. System.out.println(emp3.getName());
  49. System.out.println(emp4.getName());
  50. }
  51. }