首页 > 编程 > Java > 正文

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

2019-11-10 20:50:59
字体:
来源:转载
供稿:网友

有时候我们的代码中为避免 NullPointerException 会出现很多的对Null的判断语句,而这些语句一旦多起来,我们的代码就会变的惨不忍睹,

因此我们引入了空对象模式(null object pattern)以此来使我们的代码变的更优雅一点。

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

实例:

假如我们需要查询某个学生的信息,我们输入学号来进行查询,

如果没有这个学生的话,我们就返回一个空对象,以此来实现空对象模式。

代码实现:

import java.util.Scanner;//首先我定义一个为查询和空对象的类定义一个共同的接口interface AbstractCustomer{    String query();}//查询学号的具体实现class RealObject implements AbstractCustomer{    @Override    public String query() {        //这里你也可以返回一些别的有用的东西,我这里为了演示就返回一个字符串        return "successful";    }}//空对象类的实现class NullObject implements AbstractCustomer{    @Override    public String query() {        return "can not find this student";    }}//建造工厂class CustomerFactory{    //我们假定这是我们储存学生学号的数据库,现在我们获取到了,把它装到我们的数组里    int[] arr = {1,2,3,4,5};        public AbstractCustomer query(){        //模拟查询学号        Scanner scanner = new Scanner(System.in);        System.out.PRintln("please input student_id:/n");        int index = scanner.nextInt();        for(int i : arr){            if(i == index){                return new RealObject();            }        }        //如果没有查找到的话我们直接返回一个空对象        return new NullObject();    }}//接下来是客户端方面,我们直接操作工厂即可public class Main {    static void customer(CustomerFactory cf){        //先调用工厂的query返回一个对象,然后再用这个对象调用自己的query        String s = cf.query().query();        System.out.println(s);    }    public static void main(String[] args){        customer(new CustomerFactory());    }}

上面则是描述的空对象模式,当我们需要较多的判断是否为null时,可以用到这个模式,

以上代码还可以给接口再添加一个isNull方法来确切的判断是否为Null。

我们来执行一下这个程序

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表