java空对象模式

空对象模式,一般和工厂类结合使用有两种实现方式 一种通过接口,另一种是通过抽象类。反正不管哪一种 ,都要给你想要作用的那个类 , 定义一个接口,或者一个抽象类 一个方法 isNull(); 让类继承实现 这个方法 ,普通类就返回false ,空对象类 返回true

工厂模式

在上面工厂模式代码上进行修改。
首先,给Tree接口 加一个方法。 boolean isNUll()

package com.zfh.test.factory;

//抽象出 一个父类  即使 没有这个也没事  可以返回object  这个万类之父
public interface Tree {
    //输出自己的品种
    void sout();
    //空对象模式 需要的
    boolean isNUll();
}

Apple 和Banana类的 isNull() 返回false。

创建一个空对象类

public class NullTree implements Tree {

    @Override
    public void sout() {
        System.out.println("我是空对象");
    }
     //返回true
    @Override
    public boolean isNUll() {
        return true;
    }
}

空对象类方法 isNull 返回的是true

改造工厂类

public class TreeFactory {
    //用于标识  用枚举感觉更好
    public static final int APPLE = 1;
    public static final int BANANA = 2;

    //这里 如果 返回的是 object  那么 就不需要 有tree接口了.因为  object 是基类
    public static Tree getTree(int type) {
        Tree tree = null;//必须 声明 并且初始化  否则 编译不了
        switch (type) {
            case APPLE:
                tree = new AppleTree();
                break;
            case BANANA:
                tree = new BananaTree();
                break;
            default://找不到的话  就返回空对象
                tree = new NullTree();
                break;
        }
        return tree;
    }
}

工厂类注意default,如果传入的类型 找不到的话,就默认返回空对象类

使用

public class FactoryMain {
    public static void main(String[] args) {
        Tree apple = TreeFactory.getTree(TreeFactory.APPLE);
        Tree banana = TreeFactory.getTree(TreeFactory.BANANA);
        //这里随便传入一个数字 不是1 和2 就行
        Tree nullApple = TreeFactory.getTree(5);
        //判断是不是空对象类
        if (!apple.isNUll()) {
            apple.sout();
        }
        banana.sout();

        System.out.println("空对象类的 isNull()方法  返回值  "+nullApple.isNUll());
        //判断是不是空对象类
        if (nullApple.isNUll()) {
            nullApple.sout();
        }
    }
}

结果

在这里插入图片描述

总结

工厂类如果使用了空对象模式,那么返回值必定不为null。我们 可以通过对象isNull()方法来判断。相当于原来的null被空对象实例替代了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值