模式介绍

空对象模式是一种行为型设计模式,它通过提供一个空对象来替代null值,从而避免了对null的检查。空对象模式使得系统更加健壮,并且简化了代码。

使用场景

  • 当需要避免对null的检查时
  • 当需要提供一个默认行为时
  • 当需要简化客户端代码时

代码示例

// 抽象对象
public abstract class AbstractObject {
    protected String name;

    public abstract boolean isNull();
    public abstract String getName();
}

// 真实对象
public class RealObject extends AbstractObject {
    public RealObject(String name) {
        this.name = name;
    }

    @Override
    public boolean isNull() {
        return false;
    }

    @Override
    public String getName() {
        return name;
    }
}

// 空对象
public class NullObject extends AbstractObject {
    @Override
    public boolean isNull() {
        return true;
    }

    @Override
    public String getName() {
        return "Not Available";
    }
}

// 对象工厂
public class ObjectFactory {
    public static final String[] names = {"Object1", "Object2", "Object3"};

    public static AbstractObject getObject(String name) {
        for (String n : names) {
            if (n.equalsIgnoreCase(name)) {
                return new RealObject(n);
            }
        }
        return new NullObject();
    }
}

优缺点

优点

  • 简化了客户端代码
  • 提供了默认行为
  • 提高了系统的健壮性

缺点

  • 可能掩盖了系统的错误
  • 增加了类的数量
  • 可能影响性能