07_空对象模式

Posted africancu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了07_空对象模式相关的知识,希望对你有一定的参考价值。

空对象模式


空对象模式(Null Object Pattern)是通过实现一个默认无意义的对象来避免null值得出现,简单的说,就是为了避免在程序中出现null值判断而诞生的一种常用的设计方法。

空对象模式的例子
我们写一个听动物声音的模拟程序,代码如下:

定义动物接口

package cn.african.nullObjectPattern;

public interface Animal {
    public void makeSound();
}

定义小狗

package cn.african.nullObjectPattern;

public class Dog implements Animal {
    @Override
    public void makeSound() {
        System.out.println("汪汪汪");
    }
}
然后在定义一个人来听动物的叫声。

听动物叫声的人

package cn.african.nullObjectPattern;

public class Person {
    public void hear(Animal animal){
        if(animal != null){
            animal.makeSound();
        }
    }
}
可见,人在听动物声音的时候,都要对动物进行非空判断。
但是我们这样思考:在一个完整的系统中,animal对象是如何产生的?什么原因会产生null值?如果我们能够控制住这个null的产生,是不是就可以去掉这个if的非空判断了?
好,我们编写一个更完美的程序,增加一个NullAnimal类

增加一个NullAnimal

package cn.african.nullObjectPattern;

public class NullAnimal implements Animal {
    @Override
    public void makeSound() {}
}
增加了NullAnimal类后,在Person类中就不需要"animal != null"这句话了,到时候我们调Person中的hear方法传入的参数要么是Dog对象,要么是NullAnimal对象,就不需要在hear中进行空值判断了。
想象一个Web项目中,animal对象可能是由MVC框架映射产生,我们只要定义一个默认的映射对象是NullXXX,就可以解决空值判断问题。

以上是关于07_空对象模式的主要内容,如果未能解决你的问题,请参考以下文章

Android Java:在 onCreateView() 中返回空视图的片段

如何跳过查询条件片段中的空对象?

Fragment 的 GetTag 返回空对象引用

从 TypeScript 类型定义或 GraphQL 片段定义生成 JavaScript 空对象

我正在片段中启动我的活动,但变量变为空?

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段