什么是空对象模式?

84 阅读1分钟

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

  1. 意图
    使用空对象代替null
  2. 类图
    在这里插入图片描述
  3. 实例
interface Value {
        /**
         * 是否为空
         * @return
         */
        Boolean nonNull ();

        /**
         * 获取名字
         * @return
         */
        String getName();
    }

    static abstract class AbstractValue implements Value {
        protected String name;
    }

    static class RealValue extends AbstractValue {
        private String name;
        public RealValue (String name) {
            this.name = name;
        }

        @Override
        public Boolean nonNull() {
            return true;
        }

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

    static class NullValue extends AbstractValue {
        @Override
        public String getName() {
            return "non name";
        }

        @Override
        public Boolean nonNull() {
            return false;
        }
    }

    static class ValueFactory {
        private String existsName = "123";
        public Value getValue (String name) {
            if (existsName.equals(name)) {
                return new RealValue(name);
            }
            return new NullValue();
        }
    }
  1. 测试
public static void main(String[] args) {
        ValueFactory factory = new ValueFactory();

        System.out.println(factory.getValue("123").getName());
        System.out.println(factory.getValue("sss").getName());
    }

运行结果:

123
non name

想看更多吗?请访问:设计模式