• Java空对象设计模式


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

    我们来执行一下这个程序

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

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

  • 相关阅读:
    阿里云镜像市场,让“上云”从此零门槛!
    #火到没朋友# 攒够¥12.18, 召唤超级英雄助你上云
    阿里云1218,百亿资本助力开发者
    万网云解析全面升级开放,支持海外IP解析!
    困知,勉行—阿里云服务观
    考考你!布署上云最快需要几步?
    Ta们,用云计算改变着更多普通人的生活,所以,我们1218
    【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』
    【阿里云产品公测】性能测试服务PTS的初步尝试
    .NET LINQ概述
  • 原文地址:https://www.cnblogs.com/haodawang/p/5967181.html
Copyright © 2020-2023  润新知