java 空对象_Java 空对象设计模式(Null Object Pattern) 讲解

有时候我们的代码中为避免 NullPointerException 会出现很多的对Null的判断语句,而这些语句一旦多起来,我们的代码就会变的惨不忍睹,因此我们引入了空对象模式(null object pattern)以此来使我们的代码变的更优雅一点。

下面来看一下空对象模式的大概视图

b4e0fa5cf90846fe8eeabb48534472be.png

为了方便我这里就直接用手写的了,大家谅解一下:) ,凑合着看吧

假如我们需要查询某个学生的信息,我们输入学号来进行查询,如果没有这个学生的话,我们就返回一个空对象,以此来实现空对象模式。

下面是我的代码实现。

importjava.util.Scanner;//首先我定义一个为查询和空对象的类定义一个共同的接口

interfaceAbstractCustomer{

String query();

}//查询学号的具体实现

class RealObject implementsAbstractCustomer{

@OverridepublicString query() {//这里你也可以返回一些别的有用的东西,我这里为了演示就返回一个字符串

return "successful";

}

}//空对象类的实现

class NullObject implementsAbstractCustomer{

@OverridepublicString query() {return "can not find this student";

}

}//建造工厂

classCustomerFactory{//我们假定这是我们储存学生学号的数据库,现在我们获取到了,把它装到我们的数组里

int[] arr = {1,2,3,4,5};publicAbstractCustomer query(){//模拟查询学号

Scanner scanner = newScanner(System.in);

System.out.println("please input student_id:\n");int index =scanner.nextInt();for(inti : arr){if(i ==index){return newRealObject();

}

}//如果没有查找到的话我们直接返回一个空对象

return newNullObject();

}

}//接下来是客户端方面,我们直接操作工厂即可

public classMain {static voidcustomer(CustomerFactory cf){//先调用工厂的query返回一个对象,然后再用这个对象调用自己的query

String s =cf.query().query();

System.out.println(s);

}public static voidmain(String[] args){

customer(newCustomerFactory());

}

}

上面则是描述的空对象模式,当我们需要较多的判断是否为null时,可以用到这个模式,以上代码还可以给接口再添加一个isNull方法来确切的判断是否为Null。

我们来执行一下这个程序

59a92c470fbb69f69b26be011ce25b60.png

接下来我们输入一个数组里没有的数据

a370945662ed297103937e3bfd19463b.png

以上就是空对象模式的讲解,如果大家有任何疑问可以在回复区给我回复,谢谢:)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值