首页 > 编程语言 > 详细

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

时间:2017-02-17 19:12:59      阅读:274      评论:0      收藏:0      [点我收藏+]

 

转自:http://www.cnblogs.com/haodawang/articles/5962531.html

有时候我们的代码中为避免 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。

我们来执行一下这个程序

技术分享

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

技术分享

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

 更深入的了解空对象设计模式阅读:被遗忘的设计模式——空对象模式(Null Object Pattern)

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

原文:http://www.cnblogs.com/hihtml5/p/6411137.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!