空对象模式

1、空对象模式的概念

在空对象模式(Null Object Pattern)中,一个空对象取代NULL对象实例的检查。Null对象不是检查空值,而是反应一个不做任何动作的关系。这样的Null对象也可以在数据不可用的时候提供默认的行为。

在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。

2、实现

将创建一个定义操作(在这里,是客户的名称)的AbstractCustomer抽象类,和扩展了AbstractCustomer类的实体类。工厂类CustomerFactory基于客户传递的名字来返回RealCustomer或NullCustomer对象。NullPatternDemo类使用CustomerFactory来演示空对象模式的用法。如下图:
在这里插入图片描述

(1)抽象类

创建一个抽象类AbstractCustomer,如下:

public abstract class AbstractCustomer {
    
    protected String name;
    
    //抽象方法,判断为空
    public abstract boolean isNull();
    
    //抽象方法,获取name值
    public abstract String getName();

}

(2)创建抽象类的子类

创建抽象类AbstractCustomer的子类:

public class RealCustomer extends AbstractCustomer{
    
    //构造方法
    public RealCustomer(String name) {
        this.name = name;
    }

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

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

}
public class NullCustomer extends AbstractCustomer{

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

    @Override
    public String getName() {
        return "查无此客户!";
    }

}

(3)创建CustomerFactory类

/*
 * 此类获取客户对象
 */
public class FactoryCustomer {

    // 静态数据
    public static final String[] names = {"李狗蛋", "李铁柱", "狗蛋子" };

    // 获取客户对象
    public static AbstractCustomer getCustomer(String name) {
        for (int i = 0; i < names.length; i++) {
            if (names[i].equals(name)) {
                return new RealCustomer(name);
            }
        }
        return new NullCustomer();
    }

}

(4)测试

public class TestNullObj {

    public static void main(String[] args) {
        
        AbstractCustomer c0 = FactoryCustomer.getCustomer("李狗蛋");
        System.out.println(c0.getName());
        AbstractCustomer c2 = FactoryCustomer.getCustomer("李铁柱");
        System.out.println(c2.getName());
        AbstractCustomer c3 = FactoryCustomer.getCustomer("狗蛋子");
        System.out.println(c3.getName());
        AbstractCustomer c4 = FactoryCustomer.getCustomer("云过梦无痕");
        System.out.println(c4.getName());
    }
}

执行,控制台输出:
在这里插入图片描述
3、总结

空对象模式并不是判断对象是不是一个空值,空对象只是表示这个对象在这个系统中是不可用的,对象并不为空,只是这个对象与当前系统无任何关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值